2009-12-20 26 views
1

運行以下內容,並且它應該返回公司名稱。 xpath在firefox中工作,並返回公司名稱。然而在nokogiri,這不會發生,它只是返回空字符串!nokogiri返回空白給出正確的xpath

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

doc = Nokogiri::HTML(open('http://www.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=QHK 
CV&ff=21&APath=2.21.0.0.0&job_did=J3G71D73BM9HCK1M84Z&cbRecursionCnt=1&cbsid=6d2aee1515ed404b8306d1a583592cd4-314600403-JQ-5')) 
companyname = doc.xpath("/html[1]/body[1]/div[1]/div[1]/form[1]/div[1]/table[1]/tbody[1]/tr[2]/td[1]/div[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/div[2]/table[1]/tbody[1]/tr[1]/td[2]").to_s 

puts companyname 

回答

0

您的XPath是不正確的:)

你應該忽略tbody部分,這是由瀏覽器產生,但是通過引入nokogiri!

doc.xpath("/html[1]/body[1]/div[1]/div[1]/form[1]/div[1]/table[1]/tr[2]/td[1]/div[1]/table[1]/tr[1]/td[1]/div[1]/div[2]/table[1]/tr[1]/td[2]").to_s 

 

NB:另外,如果你使用任何classid屬性來選擇的節點,而不是完整的路徑,你的XPath將是對HTML頁面的變化更穩定。例如,你可以使用

doc.xpath("//div[@class='job_desc'][1]/table[1]/tr[1]/td[2]") 

甚至簡單的只使用一個CSS選擇

doc.css("div.job_desc td")[1] 
+0

爲什麼瀏覽器增加了TBODY什麼想法? – gpow

+0

HTML標準定義瀏覽器必須這樣做,另請參閱http://stackoverflow.com/questions/938083/why-do-browsers-insert-tbody-element-into-table-elements – akuhn