【问题标题】:Parse HTML nodes using xpath to Ruby/Nokogiri使用 Ruby/Nokogiri 的 xpath 解析 HTML 节点
【发布时间】:2018-05-03 12:10:45
【问题描述】:

运行以下命令,它应该返回序列。 Xpath 使用 chrome Xpath 处理,但在 nokogiri 中它只返回空字符串。

require 'open-uri'
require 'nokogiri'

doc = Nokogiri::HTML(open("https://pt.wiktionary.org/wiki/fazer"))      

p sequence = doc.xpath('//*[@id="NavFrame1"]/div[2]/table[2]/tbody/tr[12]')

【问题讨论】:

  • 页面未登录用户没有NavFrame1元素。
  • 好的,但是当我使用 chrome 复制 xpath 时,他给了我这个 xpath 吗?获取此元素表格的正确 xpath 是什么?

标签: ruby xpath nokogiri


【解决方案1】:

问题不在于@shota 建议的解析

实际问题是您尝试解析的 div 元素不是第一个响应的一部分。它实际上是使用 JavaScript 添加的。

如果你看到页面源代码

https://pt.wiktionary.org/wiki/fazerview-source:https://pt.wiktionary.org/wiki/fazer

你不会找到任何 id 为 NavFrame1 的元素

您还可以使用一些 javascript 禁用程序扩展来验证这一点,例如 Quick Javascript switcher

【讨论】:

    【解决方案2】:

    我刚刚用 Poltergeist 尝试过 Capybara;它工作得很好。当我也尝试了您的代码时,div[@id="NavFrame1"] 不存在。所以可能存在解析问题...

    require 'capybara'
    require 'capybara/dsl'
    require 'capybara/poltergeist'
    
    Capybara.register_driver :poltergeist_debug do |app|
      Capybara::Poltergeist::Driver.new(app, inspector: true)
    end
    
    Capybara.javascript_driver = :poltergeist_debug
    Capybara.current_driver = :poltergeist_debug 
    
    visit("https://pt.wiktionary.org/wiki/fazer")   
    doc = Nokogiri::HTML.parse(page.html)
    
    p sequence = doc.xpath('//*[@id="NavFrame1"]/div[2]/table[2]/tbody/tr[12]')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 2014-03-18
      • 2013-04-02
      相关资源
      最近更新 更多