gpt4 book ai didi

ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:14:02 25 4
gpt4 key购买 nike

我正在学习如何使用 Nokogiri,根据这段代码我遇到了一些问题:

require 'rubygems'
require 'mechanize'

post_agent = WWW::Mechanize.new
post_page = post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')

puts "\nabsolute path with tbody gives nil"
puts post_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]').xpath('text()').to_s.strip.inspect

puts "\n.at_xpath gives an empty string"
puts post_page.parser.at_xpath("//div[@id='posts']/div/table/tr/td/div[2]").at_xpath('text()').to_s.strip.inspect

puts "\ntwo lines solution with .at_xpath gives an empty string"
rows = post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")
puts rows[0].at_xpath('text()').to_s.strip.inspect


puts
puts "two lines working code"
rows = post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")
puts rows[0].xpath('text()').to_s.strip

puts "\none line working code"
puts post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")[0].xpath('text()').to_s.strip

puts "\nanother one line code"
puts post_page.parser.at_xpath("//div[@id='posts']/div/table/tr/td/div[2]").xpath('text()').to_s.strip

puts "\none line code with full path"
puts post_page.parser.xpath("/html/body/div/div/div/div/div/table/tr/td/div[2]")[0].xpath('text()').to_s.strip
  • 在XPath 中使用// 还是/ 更好? @AnthonyWJones说“使用不带前缀的 //”并不是一个好主意。
  • 我必须从任何有效的 XPath 中删除 tbody 否则我会得到一个 nil 结果。怎样才能从 XPath 中删除一个元素以使其正常工作?
  • 如果不使用完整的 XPath,是否必须使用 xpath 两次来提取数据?
  • 为什么我不能让 at_xpath 提取数据?它在“How do I parse an HTML table with Nokogiri?”中运行良好。有什么区别?

最佳答案

  1. // 表示每个级别的每个节点,因此与 / 相比它要昂贵得多。
  2. 您可以使用 * 作为占位符。
  3. 不,您可以进行 XPath 查询,获取元素,然后在节点上调用 Nokogiri 的 text 方法。
  4. 当然可以。查看“What is the absolutely cheapest way to select a child node in Nokogiri?”和我的基准文件。您将看到 at_xpath 的示例。

我发现您经常使用 text() 表达式。使用 Nokogiri 不需要这样做。您可以检索节点,然后调用节点上的 text 方法。它要便宜得多。

另请记住,Nokogiri 支持 CSS 选择器。如果您使用的是 HTML 页面,它们会更容易。

关于ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2120012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com