运行以下命令,它应该返回公司名称。 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
答案 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
注意:如果对所选节点使用任何class
或id
属性,而不是完整路径,则xpath对HTML页面的更改会更稳定。例如,您可以使用
doc.xpath("//div[@class='job_desc'][1]/table[1]/tr[1]/td[2]")
甚至只是简单地使用css选择器
doc.css("div.job_desc td")[1]