我需要一种从任何显示文章的网页中提取正文的方法。类似于Readability可以在其运行的任何网站上找到主要文本的方式。
我正在使用 Ruby on Rails,所以我认为 Hpricot 是我最好的选择。我在 Hpricot 寻找的可能吗?某处有例子吗?谢谢阅读。
我需要一种从任何显示文章的网页中提取正文的方法。类似于Readability可以在其运行的任何网站上找到主要文本的方式。
我正在使用 Ruby on Rails,所以我认为 Hpricot 是我最好的选择。我在 Hpricot 寻找的可能吗?某处有例子吗?谢谢阅读。
您当然可以使用 Hpricot 从任何给定的 HTML 页面中抓取内容。
这是一个分步教程:http ://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/
Hpricot 非常适合使用XPath表达式解析具有已知 HTML 结构的文件。
但是,您将很难编写任何可以阅读任何网页并识别主要文章文本的通用内容。我认为你需要某种基本的人工智能(至少)这远远超出了 Hpricot 可以做的范围。
如果有这样的集合,您可以做的可能是为您想要抓取的常见 HTML 格式(可能是 Wordpress、Tumblr、Blogger 等)编写一组代码。
我也相信您也可以想出一些启发式方法来尝试它(基于可读性的工作情况,我猜他们所做的 - 它似乎远非完美)
第一次尝试启发式:
1)识别(固定的)一组标签,这些标签可以被认为是“主要文本块”(例如<p>
<br>
<img>
等)的一部分。
2) 抓取页面,找到页面上最大的仅包含 (1) 中的标签的文本块。
3) 从 (2) 中返回文本,从 (1) 中删除标签。
查看可读性的结果,我认为这种启发式方法也可以。
实际上可读性是一个开源项目,托管在:http ://code.google.com/p/arc90labs-readability/
阅读主文件后,我看不出有任何理由不能在 ruby 中重新实现它。这是主文件 http://code.google.com/p/arc90labs-readability/source/browse/trunk/js/readability.js
我建议你看一下grabArticle 函数,看看他们使用了哪些指标以及他们是如何做到的。
至于你应该使用哪个lib来解析和处理你有多种选择的dom: nokogiri,libxml-ruby,hpricot,...
所有这些也都有相当不错的文档。