我可以使用Hpricot查找任何/大多数网站的主要文章文本吗?

时间:2010-07-18 11:23:53

标签: ruby screen-scraping hpricot

我需要一种从显示文章的任何网页中提取主要文本的方法。类似于Readability可以在任何运行的网站上找到主要文本的方式。

我正在使用Ruby on Rails,所以我认为Hpricot是我最好的选择。我在Hpricot中寻找的是什么?某处有例子吗?谢谢你的阅读。


2 个答案:

答案 0 :(得分:5)

您当然可以使用Hpricot从任何给定的HTML页面中抓取内容。

以下是分步教程:http://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/

Hpricot非常适合使用XPath表达式解析具有已知HTML结构的文件。

但是,您将很难编写任何可以读取任何网页并识别主要文章文本的通用内容。我认为你需要某种基本的AI(至少),这远远超出了Hpricot可以做的范围。

如果有这样的集合,你可以做的就是为你想要抓取的常见HTML格式(可能是Wordpress,Tumblr,Blogger等)编写一组代码。

我也相信你也可以提出一些heuristics尝试它(基于可读性的工作原理,我认为它们的作用是什么 - 它似乎远非完美)

首先尝试启发式:

1)识别(固定的)一组标签,这些标签可被视为“主要文本块”的一部分(例如<p> <br> <img>等。

2)抓取页面并在页面上找到仅包含(1)中标签的最大文本块。

3)从(2)返回文本,删除(1)中的标签。

看看可读性的结果,我认为这种启发式方法也会起作用。

答案 1 :(得分:4)

实际上,可读性是一个在http://code.google.com/p/arc90labs-readability/

主持的开源项目

在阅读主文件后,我没有看到任何你无法在ruby中重新实现它的原因。这是主文件 http://code.google.com/p/arc90labs-readability/source/browse/trunk/js/readability.js

我建议您查看一下grabArticle函数,了解它们使用的指标以及它们的用途。

至于你应该使用哪个lib来解析和处理dom,你有多种选择: nokogirilibxml-rubyhpricot,...

所有这些都有相当不错的文档。