2013-12-20 41 views
0

我使用引入nokogiri得到来自中国的网站(Taobao.com)图片:引入nokogiri:不能屏幕刮页面(taobao.com)

url = "http://item.taobao.com/item.htm?spm=a1z10.1.w137644-1960500098.43.d7Uwpx&id=36246359192" 
    doc = Nokogiri::HTML(open(url)) 
    puts doc.css("title").text 
    puts doc.css("img")[0]['src'] 
    puts doc.css("img#J_ImgBooth")[0]['src'] 

我能拿到冠军和doc.css("img")[0]['src'],但我无法获得img#J_ImgBooth。问题是什么?莫名其妙?

回答

1

看看HTML源代码,有IMG#J_ImgBooth没有SRC但数据src属性

<img id="J_ImgBooth" data-src="http://img03.taobaocdn.com/bao/uploaded/i3/18513032853503639/T1z1ojXdNhXXXXXXXX_!!2-item_pic.png_310x310.jpg" data-hasZoom="700" /> 

使用

doc.css("img#J_ImgBooth")[0]['data-src'] 

将被罚款。

+0

'' cqcn1991

+0

这就是我看到的。有一个'src'属性 – cqcn1991

+0

你是否从chrome的元素检查器中看到了这个?它可能会在页面加载时由js修改,它可能不是Nokogiri正在看到的实际html代码。 – nickcen

1

这个工作对我来说:

doc.at_css("#J_ImgBooth")["data-src"]

您可以检查的属性名称为data-src

#(Element:0x3ffb5d3d9df0 { 
    name = "img", 
    attributes = [ 
    #(Attr:0x3ffb5d3d9b84 { name = "id", value = "J_ImgBooth" }), 
    #(Attr:0x3ffb5d3d9b70 { 
     name = "data-src", 
     value = "http://img03.taobaocdn.com/bao/uploaded/i3/18513032853503639/T1z1ojXdNhXXXXXXXX_!!2-item_pic.png_310x310.jpg" 
     }), 
    #(Attr:0x3ffb5d3d9b5c { name = "data-haszoom", value = "700" })] 
    })