2013-12-20 80 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" })] 
    })