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

问题描述 投票:-4回答:2

运行以下命令,它应该返回序列。 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]')
ruby xpath nokogiri
2个回答
0
投票

我刚刚和Capybara一起尝试过Poltergeist;它工作得很好。当我尝试你的代码但是,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]')

0
投票

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

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

如果你看到的页面来源

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

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

你也可以使用Quick Javascript switcher这样的javascript disabler扩展来验证这一点

© www.soinside.com 2019 - 2024. All rights reserved.