【问题标题】:nokogiri returns blank given correct xpath给定正确的 xpath,nokogiri 返回空白
【发布时间】:2017-01-04 16:45:21
【问题描述】:

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

【问题讨论】:

    标签: ruby xpath nokogiri


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2018-12-23
    相关资源
    最近更新 更多