创建伟大的解析器 - 从HTML /博客中提取相关文本

时间:2009-07-18 07:27:46

标签: html parsing text-parsing html-content-extraction

我正在尝试创建一个适用于Blog Posts的通用HTML解析器。我想将我的解析器指向特定的entrie的URL并获取帖子本身的干净文本。我的基本方法(来自python)一直使用BeautifulSoup / Urllib2的组合,这没关系,但它假设你知道博客条目的正确标签。有没有人有更好的想法?

以下是一些可能有人可以扩展的想法,我没有足够的知识/技术诀窍尚未实现。

  1. unix程序'lynx'似乎特别好地解析了博客文章 - 他们使用了什么解析器,或者如何利用它?

  2. 是否有任何服务/解析器会自动删除垃圾广告等?

  3. 在这种情况下,我有一个模糊的概念,即博客帖子通常包含在某个带有class =“entry”或类似内容的定义标签中,这可能是一个好的假设。因此,有可能创建一个算法,找到它们之间最清晰文本的封闭标签 - 对此有什么想法吗?

  4. 谢谢!

2 个答案:

答案 0 :(得分:24)

男孩,我有完美的解决方案。

Arc90的可读性算法就是这样做的。给定HTML内容,它会选择主要博客文章的内容,忽略页眉,页脚,导航等。

以下是实施:

我将在几天内向CPAN发布一个Perl端口。完成。

希望这有帮助!

答案 1 :(得分:3)

有些项目专门用于过滤掉给定页面的“噪音”。通常,这样做的方法是给算法一个给定类型页面的几个例子,它可以看看哪些部分之间没有变化。话虽这么说,你必须给算法一些你希望解析的每个博客的几个示例页面/帖子。当你有一小部分你要抓取的网站(例如新闻网站)时,这通常很有效。该算法基本上是检测他们在HTML中使用的模板并挑选出有趣的部分。这里没有任何魔力,它是艰难而不完美的。

这个算法的一个很好的例子可以在EveryBlock.com源代码中找到,它只是开源的。转到everyblock.com/code并下载“ebdata”软件包并查看“templatemaker”模块。

我并不是要说明显而已,但您是否考虑过使用相关博客中的RSS?通常,这些字段包含整个博客帖子,标题和其他元信息。使用RSS比我之前提到的解决方案简单得多。