1

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

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
4

1 回答 1

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

 

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

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

甚至很简单,只需使用 css 选择器

doc.css("div.job_desc td")[1]
于 2009-12-20T11:59:18.207 回答