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

kef*_*hou 44 python webpage html-parsing web-scraping

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

什么是这样做的通用方法,适用于大多数主要新闻网站?

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

gte*_*25u 30

有很多方法可以做到,但是,没有一种方法可以使用.这是最容易的两个:

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

  • 可读性为+1.由于可读性最适合文章页面而不是主页,因此在为文章URL解析RSS源时效果最佳. (3认同)

Cer*_*rin 9

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

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


Jor*_*elf 8

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


Mik*_*bov 8

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

简而言之,如果您需要删除例如侧边栏和菜单,“智能”开源库就足够了,但它们不能处理文章内不必要内容的删除,并且总体上相当嘈杂;有时他们会删除文章本身并且不返回任何内容。商业服务使用计算机视觉和机器学习,这使他们能够提供更精确的输出。

对于某些用例,更简单的库(例如html-text)比商业服务和“智能”开源库更可取 - 它们速度很快,并且确保信息不会丢失(即召回率很高)。

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

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

python -m autoextract urls.txt --page-type article --api-key <API_KEY> --output res.jl
Run Code Online (Sandbox Code Playgroud)


Amb*_*ber 7

没有办法保证可以正常工作,但您可能使用的一种策略是尝试查找内部具有最明显文本的元素.


asm*_*ier 7

有关Java的解决方案,请查看https://code.google.com/p/boilerpipe/:

boilerpipe库提供了算法来检测和删除网页主要文本内容周围的剩余"混乱"(样板,模板).

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

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

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


ned*_*edk 6

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


Phi*_*ilS 6

另一种将“真实”内容与噪音区分开来的方法是测量HTML 页面各部分的HTML 密度

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

更新:刚刚发现上面的 URL 现在不起作用;这是一个指向archive.org缓存版本的替代链接


Mon*_*lal 6

检查以下脚本。真的很神奇:

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)
Run Code Online (Sandbox Code Playgroud)

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

pip3 install newspaper3k
Run Code Online (Sandbox Code Playgroud)