gpt4 book ai didi

ruby - 使用 Ruby/Mechanize(和 Nokogiri)从 HTML 中提取单个字符串

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

我正在从论坛中提取数据。我的脚本based on工作正常。现在我需要从单个帖子中提取日期和时间(2009 年 12 月 21 日,20:39)。我无法让它工作。我使用 FireXPath 来确定 xpath。

示例代码:

 require 'rubygems'
require 'mechanize'

post_agent = WWW::Mechanize.new
post_page = post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')
puts post_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]/text()').to_s.strip
puts post_page.parser.at_xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]/text()').to_s.strip
puts post_page.parser.xpath('//[@id="post1960370"]/tbody/tr[1]/td/div[2]/text()')

我所有的尝试都以空字符串或错误结束。


我找不到任何关于在 Mechanize 中使用 Nokogiri 的文档。 The Mechanize documentation在页面底部说:

After you have used Mechanize to navigate to the page that you need to scrape, then scrape it using Nokogiri methods.

但是什么方法呢?我在哪里可以通过示例和解释的语法阅读它们?我在 Nokogiri's site 上没有找到任何东西要么。

最佳答案

拉德克。我将向您展示如何钓鱼。

当您调用 Mechanize::Page::parser 时,它会为您提供 Nokogiri 文档。因此,您的“xpath”和“at_xpath”调用正在调用 Nokogiri。问题出在您的 xpath 中。通常,从您可以开始工作的最通用的 xpath 开始,然后缩小范围。所以,例如,而不是这个:

puts  post_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]/text()').to_s.strip

从这里开始:

puts post_page.parser.xpath('//table').to_html

这会在任何地方获取任何表格,然后将它们打印为 html。检查 HTML,看看它带回了哪些表格。当你只想要一张时,它可能会抓取几张,所以你需要告诉它如何挑选你想要的一张 table 。例如,如果您注意到您想要的表格具有 CSS 类“userdata”,那么试试这个:

puts post_page.parser.xpath("//table[@class='userdata']").to_html

任何时候你没有得到一个数组,你搞砸了 xpath,所以在继续之前修复它。一旦你得到你想要的表,然后尝试获取行:

puts post_page.parser.xpath("//table[@class='userdata']//tr").to_html

如果可行,那么去掉“to_html”,您现在就有了一个 Nokogiri 节点数组,每个节点一个表格行。

这就是您的做法。

关于ruby - 使用 Ruby/Mechanize(和 Nokogiri)从 HTML 中提取单个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2114695/

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