使用 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/fazer
即 view-source:https://pt.wiktionary.org/wiki/fazer
您将找不到 ID 为 NavFrame1
的任何元素
您也可以使用一些 javascript 禁用扩展来验证这一点,例如 Quick Javascript switcher
运行下面,应该是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/fazer 即 view-source:https://pt.wiktionary.org/wiki/fazer
您将找不到 ID 为 NavFrame1
您也可以使用一些 javascript 禁用扩展来验证这一点,例如 Quick Javascript switcher