networking抓取 – 如何识别网页上的主要内容
鉴于新闻文章的网页(来自任何主要新闻来源,如时代或彭博社),我想确定在该网页上的主要文章内容,并抛出其他杂项元素,如广告,菜单,边栏,用户评论。
在大多数主要新闻网站上,通用的方法是什么?
数据挖掘有哪些好的工具或库? (最好是基于python)
没有办法做到这一点,保证工作,但是你可能使用的一种策略是试图find其中最可见文本的元素。
有很多方法可以做到,但是,没有一个会一直工作。 这是两个最简单的:
- 如果这是一个已知的有限网站:在你的刮板将每个url从正常的url转换为给定网站的打印url(不能真正在网站上推广)
- 使用arc90可读性algorithm(参考实现在JavaScript中) http://code.google.com/p/arc90labs-readability/ 。 这个algorithm的简短版本是在它们内部寻找带有p标签的div。 它不会为一些网站工作,但一般都很好。
Diffbot提供了一个免费的(10.000 url)API来做到这一点,不知道这种方法是你在找什么,但它可以帮助某人http://www.diffbot.com/
前一段时间我为这个任务写了一个简单的Python脚本 。 它使用启发式将文本块分组在一起,根据它们在DOM中的深度。 然后将文本最多的组作为主要内容。 这并不完美,但通常适用于新闻网站,文章通常是最大的文本分组,即使分成多个div / p标签。
你可以使用如下脚本: python webarticle2text.py <url>
有关Java的解决scheme, 请参阅https://code.google.com/p/boilerpipe/ :
锅炉库提供algorithm来检测和去除网页主要文本内容的剩余“混乱”(样板,模板)。
图书馆已经为常见的任务提供了具体的策略(例如:新闻文章的提取),也可以很容易地扩展到个人的问题设置。
但是这里也有一个python包装:
在该页面上提取RSS提要( <link type="application/rss+xml" href="..."/>
)并parsing提要中的数据以获取主要内容可能更有用。
将“真实”内容与噪声分开的另一种可能性是通过测量 HTML页面各部分的HTML密度 。
您将需要一些实验来提取“真实”的内容,我想你可以通过启发式来确定HTML段的确切边界,然后在识别出有趣的内容之后,改进algorithm。
更新:刚刚发现了上面的url现在不工作; 这里是一个到archive.orgcaching版本的替代链接 。
我不会试图从网页上刮掉它 – 太多的东西可能会搞砸了,而是看看哪些网站发布RSS提要。 例如,“卫报”的RSS源包含了他们主要文章中的大部分内容:
http://feeds.guardian.co.uk/theguardian/rss
我不知道泰晤士报(伦敦时报,不是纽约)是否有一个,因为它是在付费墙背后。 祝你好运