2014-09-30 103 views
0

我正在嘗試使用xpath和nokogiri來提取谷歌圖片的圖片網址。當我右鍵單擊圖像並複製其xpath,我得到以下內容:用Nokogiri和Xpath提取圖片鏈接

// * [@ id =「irc_cc」]/div [3]/div [1]/div [1]/div [ 2]/div [1]/a/img

但是,當我把它放到nokogiri xpath調用中時,沒有任何返回。關於如何捕獲圖像URL的任何想法?謝謝!

require "open-uri" 
require "mechanize" 
require "net/http" 

base_url = "https://www.google.com/search? 
tbm=isch&tbs=isz:lt,islt:vga&q=Analog%20Bar%20San%20Diego%20Burgers" 

doc = Nokogiri::HTML(open(base_url)) 
doc.xpath('//*[@id="irc_cc"]/div[3]/div[1]/div[1]/div[2]/div[1]/a/img').each do |node| 
    puts node 
end 
+0

我找不到任何id爲'irc_cc'的html元素 – gotva 2014-09-30 09:07:24

+0

嗯好吧,所以我沒有查看源代碼,我也沒有看到任何與irc_cc。我得到這個Xpath的方式是右鍵單擊Google中的圖像並單擊檢查元素,然後右鍵單擊該元素並單擊複製XPath。有沒有更好的方法來做到這一點? – Brandon 2014-09-30 09:10:34

+1

我知道「複製XPATH」方便快捷,但它看起來像這個功能有一個bug ...你總是可以手動構建你的XPATH – gotva 2014-09-30 09:17:05

回答

1

這是因爲瀏覽器很可能會以不同方式查看此頁面。 Nokogiri或open-uri都不會處理JavaScript代碼。通過將它打印到標準輸出或文件()檢查網頁的內容,然後你就可以構建所需的XPath - 與http://ponderer.org/download/xpath/

幫助您也可以嘗試使用CSS選擇器代替的XPath - http://ruby.bastardsbook.com/chapters/html-parsing/

Nokogiri的css方法將滿足您的大部分需求。對於 需要更精確的選擇器的網頁,您可以跳到XPath 語法的世界並利用Nokogiri的xpath方法。