2009-12-20 17 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