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

Posted

技术标签:

【中文标题】创建出色的解析器 - 从 HTML/博客中提取相关文本【英文标题】:Create Great Parser - Extract Relevant Text From HTML/Blogs 【发布时间】:2010-11-11 22:16:11 【问题描述】:

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

这里有一些想法也许有人可以扩展,但我还没有足够的知识/诀窍来实施。

    unix 程序“lynx”似乎特别擅长解析博客文章 - 他们使用什么解析器,或者如何使用它?

    是否有自动删除垃圾广告等的服务/解析器?

    在这种情况下,我有一个模糊的概念,即博客文章通常包含在具有 class="entry" 或类似内容的某个定义标签中可能是一个不错的假设。因此,有可能创建一个算法来找到它们之间的文本最干净的封闭标签 - 对此有什么想法吗?

谢谢!

【问题讨论】:

Lynx 使用自己的 tagoup 解析器。源代码可用。 【参考方案1】:

男孩,我有适合你的完美解决方案吗?

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

以下是以下实现:

javascript Perl php Python Ruby C#

我将在几天后发布一个到 CPAN 的 Perl 端口。完成。

希望这会有所帮助!

【讨论】:

事实证明这非常有效 - 需要进行一些更改以使其更好(在 beautifulsoup 中更改为 SGML 解析器而不是 HTMLParser),但这是一个很棒的解决方案!谢谢 一个快速说明:Arc90 的可读性工具有一些弱点。在像这样的复杂页面 (blog.moertel.com/articles/2007/02/22/…) 上,它会默默地丢弃大部分代码块。如果您要使用它从 coding 博客中提取信息,这将是一个重大问题。 感谢 python 和 php 链接,我不知道这些存在。 我已经下载了c#端口,处理一个html页面大约需要1.5秒。平时这样吗?!? 你是一个救生员。谢谢!【参考方案2】:

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

可以在刚刚开源的 EveryBlock.com 源代码中找到这个算法的一个很好的例子。前往everyblock.com/code下载“ebdata”包并查看“templatemaker”模块。

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

【讨论】:

是的,我实际上有 RSS 数据,问题是很多没有全文,而且我在每种情况下都需要它。现在检查一下,谢谢。

以上是关于创建出色的解析器 - 从 HTML/博客中提取相关文本的主要内容,如果未能解决你的问题,请参考以下文章

名片解析器。如何从名片识别文本中提取相关信息?

如何在 Twig 中提取从 HTML 解析的纯文本?

求帮忙制作一个JAVA HTMLParser Extractor解析器类 从HTML中提取所需要的信息

从现有 json 列表中提取唯一值以创建唯一的列表视图构建器

CrawlSpider

CSDN热榜华为云博客都可用来练习Python scrapy 爬虫