Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 给定正确的xpath,nokogiri返回空白_Ruby_Xpath_Nokogiri - Fatal编程技术网

Ruby 给定正确的xpath,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

运行以下命令,它应该返回公司名称。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

您的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]