kef*_*hou 44 python webpage html-parsing web-scraping
鉴于新闻文章网页(来自任何主要新闻来源,如时代或布隆伯格),我想确定该页面上的主要文章内容,并抛弃其他misc元素,如广告,菜单,侧边栏,用户评论.
什么是这样做的通用方法,适用于大多数主要新闻网站?
什么是数据挖掘的好工具或库?(最好是基于python)
gte*_*25u 30
有很多方法可以做到,但是,没有一种方法可以使用.这是最容易的两个:
不久前我为这个任务写了一个简单的Python脚本.它使用启发式方法根据文本块在DOM中的深度将文本块组合在一起.然后假定具有最多文本的组是主要内容.它并不完美,但通常适用于新闻网站,其中文章通常是最大的文本分组,即使分解为多个div/p标签.
您可以使用以下脚本: python webarticle2text.py <url>
最近(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)
有关Java的解决方案,请查看https://code.google.com/p/boilerpipe/:
boilerpipe库提供了算法来检测和删除网页主要文本内容周围的剩余"混乱"(样板,模板).
该库已经为常见任务提供了具体的策略(例如:新闻文章提取),也可以轻松扩展到个别问题设置.
但是这里还有一个python包装器:
https://github.com/misja/python-boilerpipe
检查以下脚本。真的很神奇:
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)