使用 xpath 将 HTML 个节点解析为 Ruby/Nokogiri

Parse HTML nodes using xpath to Ruby/Nokogiri

运行下面,应该是return的顺序。 Xpath 使用 chrome Xpath 处理,但在 nokogiri 中它只是 returns 空字符串。

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]')

我刚试过水豚和闹鬼;它工作正常。当我也尝试您的代码时,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]')

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

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

如果您看到

的页面源

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

您将找不到 ID 为 NavFrame1

的任何元素

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