给出正确的xpath,nokogiri返回空白

时间:2009-12-20 10:51:08

标签: ruby xpath nokogiri

运行以下命令,它应该返回公司名称。 xpath在firefox中工作,它返回公司名称。但是在nokogiri,这没有发生,它jsut返回空字符串!

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

1 个答案:

答案 0 :(得分: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

注意:如果对所选节点使用任何classid属性,而不是完整路径,则xpath对HTML页面的更改会更稳定。例如,您可以使用

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

甚至只是简单地使用css选择器

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