Ruby 给定正确的xpath,nokogiri返回空白
运行以下命令,它应该返回公司名称。xpath在firefox中工作,并返回公司名称。然而在nokogiri中,这并没有发生,它返回空字符串Ruby 给定正确的xpath,nokogiri返回空白,ruby,xpath,nokogiri,Ruby,Xpath,Nokogiri,运行以下命令,它应该返回公司名称。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
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
您的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页面更改时会更加稳定。例如,您可以使用
或者甚至简单,只需使用css选择器即可
知道浏览器为什么要添加tbody吗?HTML标准规定浏览器必须这样做,另请参见
doc.xpath("//div[@class='job_desc'][1]/table[1]/tr[1]/td[2]")
doc.css("div.job_desc td")[1]