Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 网页抓取-如何识别网页上的主要内容_Python_Web Scraping_Html Parsing_Webpage - Fatal编程技术网

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

Python 网页抓取-如何识别网页上的主要内容,python,web-scraping,html-parsing,webpage,Python,Web Scraping,Html Parsing,Webpage,给定一个新闻文章网页(来自任何主要新闻来源,如泰晤士报或彭博社),我想确定该网页上的主要文章内容,并扔掉其他杂项元素,如广告、菜单、边栏、用户评论 在大多数主要新闻网站上,什么是通用的方法 哪些是数据挖掘的好工具或库?(最好是基于python的)这样做没有保证有效的方法,但是您可以使用的一种策略是尝试查找包含最可见文本的元素。提取RSS提要可能更有用()然后分析提要中的数据以获取主要内容。我不会试图从网页上刮取它-太多的东西可能会把它弄糟-而是查看哪些网站发布RSS提要。例如,《卫报》的RSS提

给定一个新闻文章网页(来自任何主要新闻来源,如泰晤士报或彭博社),我想确定该网页上的主要文章内容,并扔掉其他杂项元素,如广告、菜单、边栏、用户评论

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


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

这样做没有保证有效的方法,但是您可以使用的一种策略是尝试查找包含最可见文本的元素。

提取RSS提要可能更有用(
)然后分析提要中的数据以获取主要内容。

我不会试图从网页上刮取它-太多的东西可能会把它弄糟-而是查看哪些网站发布RSS提要。例如,《卫报》的RSS提要包含了其主要文章的大部分文本:


我不知道泰晤士报(伦敦泰晤士报,不是纽约时报)是否有一个,因为它在付费墙后面。祝你好运…

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

  • 如果是一组已知的有限的网站:在你的scraper中,将每个url从一个给定网站的普通url转换为打印url(不能在多个网站之间通用)
  • 使用arc90可读性算法(参考实现采用javascript)。该算法的简短版本是,它查找带有p标记的div。它将不适用于某些网站,但通常是相当好的

将“真实”内容与噪音分离的另一种可能性是通过HTML页面的各个部分

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

更新:刚刚发现上面的URL现在不工作;到一个缓存版本的archive.org。

不久前,我为这个任务写了一篇文章。它使用启发式方法根据文本块在DOM中的深度将其分组。然后假设文本最多的组是主要内容。这并不完美,但通常对新闻网站来说效果很好,因为在新闻网站上,文章通常是最大的文本分组,即使被分成多个div/p标签


您可以使用这样的脚本:
python webarticle2text.py

Diffbot提供了一个免费的(10.000个URL)API来实现这一点,不知道这种方法是否是您想要的,但它可能会帮助某些人了解Java中的解决方案:

boilerpipe库提供了一些算法,用于检测和删除网页主要文本内容周围多余的“杂波”(样板、模板)

该库已经为常见任务(例如:新闻文章提取)提供了特定的策略,并且还可以轻松地扩展到单个问题设置

但这里也有一个python包装器:


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

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)
更多文档可在上找到,您应使用以下方式安装:

pip3 install newspaper3k
最近(2020年初)比较了各种提取文章正文的方法,没有广告、菜单、边栏、用户评论等。请参阅。A、数据和评估脚本可用。它比较了此处答案中提到的许多选项,以及一些未提及的选项:

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

对于一些用例来说,更简单的库(比如)比商业服务和“智能”开源库更受欢迎——它们速度快,并且确保信息不会丢失(即召回率高)

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

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

python -m autoextract urls.txt --page-type article --api-key <API_KEY> --output res.jl
python-m autoextract url.txt--页面类型文章--api键--输出res.jl

NB:for ATOM提要
type=“application/ATOM+xml”
这是一个好主意,但这可能是偶然的,因为很多提要只包含一篇文章摘要。这是可以理解的,因为大多数新闻网站的目的是让你看广告,你通常不会在RSS阅读器中看到它。我看到的大多数RSS提要都只有完整文章的简短摘要。看看
可读性
书签是如何实现的。这样做的浏览器将对在线广告构成巨大威胁。原始bookmarklet的代码如下:
可读性
现在是一项服务,也是一种代码不可用。我认为这是一个非常好的ML使用案例。ML模型可以通过像
可读性
这样的库进行训练,也可以通过人工监督进行训练。有许多库尝试为您这样做(显然不是100准确)。检查+1的可读性。由于可读性最适合文章页面,而不是主页,因此