2011-01-12 131 views
38

鉴于新闻文章的网页(来自任何主要新闻来源,如时间或bloomberg),我想确定该网页上的主要文章内容,并抛出其他misc元素如广告,菜单,侧边栏,用户评论。Web抓取 - 如何识别网页上的主要内容

这样做的一般方法是什么,可以在大多数主要新闻网站上使用?

数据挖掘有哪些好的工具或库? (最好是基于python的)

+5

看到Readability`书签是如何实现的`http://lab.arc90.com/experiments/readability/ – jfs 2011-01-12 18:07:38

+0

一这样做的浏览器将对在线广告构成巨大威胁。 – 2011-01-12 18:29:12

+2

原始书签的代码在这里:http://code.google.com/p/arc90labs-readability/source/browse/`可读性`现在是一种服务,它的代码不可用。 – lsh 2014-03-09 21:47:48

回答

4

没有办法做到这一点可以保证正常工作,但是你可以使用的一种策略是试图找到里面最明显文本的元素。

4

提取该页面上的RSS提要(<link type="application/rss+xml" href="..."/>)并解析提要中的数据以获取主要内容可能会更有用。

+0

注意:对于ATOM提要`type =“application/atom + xml”` – nedk 2011-01-12 17:59:20

+0

一个好主意,但这可能会被打或失,因为很多提要只包含文章摘要。这是可以理解的,因为大多数新闻网站的重点是让你查看广告,而这通常不会在RSS阅读器中。 – Cerin 2011-01-13 02:23:53

0

我不会试图从网页上刮掉它 - 太多的东西可能会搞砸 - 而是看看哪些网站发布RSS提要。例如,监护人的RSS feed有大部分文字从他们的重要文章:

http://feeds.guardian.co.uk/theguardian/rss

我不知道,如果泰晤士报(伦敦时报,不是纽约州)之一,因为它是一个付费墙。祝你好运...

+0

我见过的大多数RSS提要只有短文摘要。 – kefeizhou 2011-01-12 18:02:49

27

有很多方法可以做到这一点,但是,没有人会一直工作。这里有两个最简单的:

  • ,如果它是一个已知的有限集合网站:在您的刮刀将每个URL从正常的URL到打印网址指定网站(不能真正跨站点一概而论)
  • 使用arc90可读性算法(参考实现在JavaScript中)http://code.google.com/p/arc90labs-readability/。这个算法的简短版本是在它们内部寻找带有p标签的div。它不适用于某些网站,但通常很不错。
3

将“真实”内容与噪声分开的另一种可能性是通过HTML页面各部分的measuring HTML density

您将需要一些实验来提取“真实”内容的阈值,我想您可以通过在识别出有趣的内容之后应用启发式来指定HTML片段的确切范围来改进算法。

更新:刚刚发现上面的网址现在不工作; here is an alternative link复制到archive.org的缓存版本。

8

前一段时间,我为此任务写了一个simple Python script。它使用启发式将文本块根据它们在DOM中的深度分组在一起。然后认为文本最多的组是主要内容。这并不完美,但通常适用于新闻网站,文章通常是最大的文本分组,即使分成多个div/p标签。

你会使用脚本,如:python webarticle2text.py <url>

8

Diffbot提供免费的(10。000 URL)的API来做到这一点,不知道这种做法是你在找什么,但它可能会帮助别人http://www.diffbot.com/

6

对于Java的解决方案来看看https://code.google.com/p/boilerpipe/

的boilerpipe库提供算法来检测和消除网页主要文本内容周围的多余“混乱”(样板,模板)。

该图书馆已经为常见任务提供了特定的策略(例如:新闻文章提取),并且也可以很容易地针对单个问题设置进行扩展。

但也有解决这个可以在这里找到一个Python包装:

https://github.com/misja/python-boilerpipe