当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用Ruby/Mechanize(和Nokogiri)从HTML中提取单个字符串》经验,为你挑选了2个好方法。

我正从论坛中提取数据.我的脚本基于工作正常.现在我需要从单个帖子中提取日期和时间(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的任何文档.Mechanize文档在页面底部显示:

使用Mechanize导航到需要刮擦的页面后,使用Nokogiri方法刮取它.

但有什么方法呢?我在哪里可以通过样本和解释语法阅读它们?我也没有在Nokogiri的网站上找到任何东西.



1> Wayne Conrad..:

拉德克.我要告诉你如何钓鱼.

当你打电话时Mechanize::Page::parser,它会给你Nokogiri文件.所以你的" xpath"和" at_xpath"调用正在调用Nokogiri.问题出在你的xpaths中.一般情况下,从最常用的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,查看它带回的表.当你只想要一个时,它可能会抓住几个,所以你需要告诉它如何挑选你想要的一个表.例如,如果你注意到你想要的表有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节点,每个节点都有一个表格行.

这就是你如何做到的.


PS:这是一个通用的教程,展示了如何找出正确的xpath:你没有从一个完全指定的xpath开始,因为如果它什么都没有返回你就不知道出了什么问题.从一般的东西开始,它保证返回一些东西,然后继续使它更具体,直到你有你想要的东西.通过逐步执行,当它不起作用时,您知道它是您添加到xpath的最后一件事.

2> RubyDubee..:

我想你已经从Firebug中复制了这个,firebug给你一个额外的tbody,实际代码可能不存在...所以我的建议是删除那个tbody然后再试一次.如果它仍然不起作用...那么按照韦恩康拉德的过程,这是最好的!


浏览器中的源代码总是令人怀疑,因为浏览器可以并且将会对HTML进行大量修复,或者按照它们想要的格式进行按摩.""标记就是一个很好的例子.我使用浏览器的源视图作为"它有点像这样"的视图,但直接从主机检索实际的HTML并在我试图解析时在编辑器中查看它,如果事情似乎是无稽之谈.在解析的文档中使用IRB打开和戳戳通常很好,但有时需要打开编辑器.
推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有