网页抓取 - 如何识别网页上的主要内容

时间:2011-01-12 17:46:15

标签: python web-scraping html-parsing webpage

鉴于新闻文章网页(来自任何主要新闻来源,如时代或布隆伯格),我想确定该页面上的主要文章内容,并抛弃其他misc元素,如广告,菜单,侧边栏,用户评论。

在大多数主要新闻网站上使用的通用方法是什么?

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

10 个答案:

答案 0 :(得分:28)

有很多方法可以做到,但是,没有一种方法可以使用。这是最简单的两个:

  • 如果它是一组已知的有限网站:在你的刮刀中将每个网址从普通网址转换为给定网站的打印网址(不能真正在网站上进行推广)
  • 使用arc90可读性算法(参考实现在javascript中)http://code.google.com/p/arc90labs-readability/。该算法的简短版本是在其中查找带有p标签的div。它不适用于某些网站,但通常都很不错。

答案 1 :(得分:8)

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

您可以使用以下脚本:python webarticle2text.py <url>

答案 2 :(得分:8)

Diffbot提供了一个免费的(10.000 urls)API,不知道这种方法是否符合您的要求,但它可能会帮助某人http://www.diffbot.com/

答案 3 :(得分:7)

对于Java中的解决方案,请查看https://code.google.com/p/boilerpipe/

  

samppipe库提供了一些算法来检测和删除网页主要文本内容周围的剩余“混乱”(样板,模板)。

     

图书馆已经为常见任务提供了具体的策略(例如:新闻文章提取),也可以轻松扩展到个别问题设置。

但是这里还有一个python包装器:

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

答案 4 :(得分:6)

没有办法保证这样做有效,但你可能会使用的一种策略是尝试找到内部最明显的文本元素。

答案 5 :(得分:4)

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

答案 6 :(得分:3)

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

您需要对阈值进行一些实验来提取“真实”内容,我猜您可以通过应用启发式方法来识别有趣内容后指定HTML段的确切界限来改进算法。

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

答案 7 :(得分:3)

检查以下脚本。真是太棒了:

from newspaper import Article
URL = "https://www.ksat.com/money/philippines-stops-sending-workers-to-qatar"
article = Article(URL)
article.download()
print(article.html)
article.parse()
print(article.authors)
print(article.publish_date)
#print(article.text)
print(article.top_image)
print(article.movies)
article.nlp()
print(article.keywords)
print(article.summary)

可以在http://newspaper.readthedocs.io/en/latest/https://github.com/codelucas/newspaper找到更多文档,您应该使用以下命令安装:

pip3 install newspaper3k

答案 8 :(得分:2)

最近(2020年初)对提取文章正文的各种方法进行了比较,其中不包括广告,菜单,边栏,用户评论等-参见https://github.com/scrapinghub/article-extraction-benchmarkreport,数据和评估脚本可用。它比较了此处答案中提到的许多选项以及一些未提及的选项:

简而言之,如果您需要删除例如边栏和菜单,但它们无法处理文章中不必要的内容的删除,并且总体上很吵;有时他们会删除文章本身,却一无所获。商业服务使用计算机视觉和机器学习,这使它们能够提供更精确的输出。

对于某些用例,无论是商业服务还是“智能”开源库,都更喜欢像html-text这样更简单的库-它们速度很快,并且可以确保信息不丢失(即回想率很高)。

我不建议您粘贴复制代码段,因为即使对于从HTML提取文本的看似简单的任务也有很多极端情况,并且有可用的库(例如html-text或html2text)应该处理这些边缘情况。

要使用商业工具,通常需要先获取API密钥,然后再使用客户端库。例如,对于Scrapinghub的自动提取(免责声明:我在那儿工作),您需要安装pip install scrapinghub-autoextract。有可用的Python API-有关详细信息,请参见https://github.com/scrapinghub/scrapinghub-autoextract自述文件,但是一种简单的提取方法是使用URL提取一个.txt文件,然后运行

python -m autoextract urls.txt --page-type article --api-key <API_KEY> --output res.jl

答案 9 :(得分:0)

我不会试图从网页上删除它 - 太多的东西可能搞砸了 - 而是看看哪些网站发布RSS提要。例如,Guardian的RSS提要包含其主要文章中的大部分文本:

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

我不知道时代(伦敦时报,不是纽约)是否有一个,因为它是在付费墙背后。祝你好运...