从网页抓取数据(使用Python模块htmldate的核心操作(一)(图))

优采云 发布时间: 2021-12-04 23:19

  从网页抓取数据(使用Python模块htmldate的核心操作(一)(图))

  Web 数据挖掘涉及数据处理中的大量设计决策和转折点。根据数据采集的目的,可能还需要广泛的过滤和质量评估。虽然可以预期一些*敏*感*词*的算法可以消除不规则性,但低误差率的需要和仔细阅读方法的使用(例如在字典研究中搜索示例)意味着数据集在构建和处理方面的不断改进和改进.

  将整个页面与正文内容区分开来有助于缓解与网页文本相关的许多质量问题:如果正文太短或多余,则可能没有必要使用它。尽管它对于消除 Web 文档的重复很有用,但与内容提取相关的其他任务也受益于更清晰的文本库,因为它可以处理“真实”内容。在语言和词典研究的特定情况下,它允许对文档中真正重要的部分进行内容检查(例如语言检测)。

  网页内容提取的挑战

  随着文本语料库、文本类型和用例的类型越来越多,针对给定的研究目标评估某些网络数据的充分性和质量变得越来越困难。语料库构建的核心操作包括保留所需内容和丢弃其余内容。这个任务的很多名称都是指特殊的子任务或整体:网页抓取、模板移除或模板检测、网页模板检测、网页清理或网络内容提取-最近的概述请参考Lejeune&Zhu (2018) .

  最近,使用 CommonCrawl 的方法蓬勃发展,因为它们允许通过跳过(或更准确地外包)爬行阶段来加速下载和处理。虽然我认为通过 Web 找到自己的“自己的”方式与某些使用场景非常相关,但很明显,CommonCrawl 数据不应该在没有过滤的情况下使用,它也可以从更精细的元数据中受益。

  我已经写了关于使用 Python 模块 htmldate 从 HTML 页面提取日期的正在进行的工作,现在我将介绍我的处理链的第二个组件:trafilatura,一个用于文本提取的 Python 库。它侧重于主要内容,通常是中心显示的部分,没有左右栏、页眉或页脚,但包括潜在的标题和评论。

  介绍使用 Trafilatura 进行文本抓取

  Trafilatura 是一个 Python 库,旨在下载、解析和抓取网络数据。它还提供了可以轻松帮助 网站 从站点地图和提要中导航和提取链接的工具。

  其主要目的是找到网页的相关和原创文本部分,并去除由重复元素(页眉和页脚、广告、链接/博客等)组成的噪音。它必须足够精确,不会遗漏文本或丢弃有效文档,而且还必须非常快,因为预计它会在生产中运行数百万页。

  Trafilatura 抓取网页的主要文本,同时保留一些结构。此任务也称为模板移除、基于 DOM 的内容提取、主要内容识别或 HTML 文本清理。处理结果可以是 TXT、CSV、JSON 和 XML 格式。在后一种情况下,诸如文本格式(粗体、斜体等)和页面结构(段落、标题、列表、链接、图像等)等基本格式元素将被保留,然后可用于进一步处理。

  这个库主要面向语言分析,但可以用于许多不同的目的。从语言的角度来看,特别是与“预网络”和一般语料相比,网络语料构建的挑战在于能够对生成的网络文本进行提取和预处理,最终使它们在一个描述清晰、连贯的集合中可用.

  因此,trafilatura 具有注释提取(与其余部分分开)、用于句子、段落和文档级别重复检测的最近最少使用 (LRU) 缓存、与文本编码倡议 (XMLTEI) 建议兼容的 XML 输出以及基于语言的内容提取检测。

  该库适用于所有常见版本的 Python,可以按如下方式安装:

  $ pip install tr​​afilatura # pip3(如果适用)

  与 Python 一起使用

  该库收录一系列 Python 函数,可以轻松重用并适应各种开发设置:

  >>> 导入 trafilatura >>> 下载 = trafilatura 。fetch_url ( 'https://github.blog/2019-03-29-leader-spotlight-erin-spiceland/' ) >>> trafilatura 。extract ( downloaded ) # 将主要内容和评论输出为纯文本... >>> trafilatura . extract ( downloaded , xml_output = True , include_comments = False ) # 输出没有注释的主要内容为 XML ...

  这些值的组合可能提供最快的执行时间,但不一定包括所有可用的文本段:

  >>> 结果 = 提取(已下载, include_comments = False , include_tables = False , no_fallback = True )

  输入可以由先前解析的树(即 lxml.html 对象)组成,然后无缝处理:

  >>> 从 lxml 导入 html >>> mytree = html 。fromstring ( '<p>这是正文。它必须足够长才能绕过安全检查。Lorem ipsum dolor sat amet, consectetur adipiscing elit, sed do eiusmod tempor incidundunt ut Labore et dolore magna aliqua。' ) >>> extract ( mytree ) '这是正文。它必须足够长才能绕过安全检查。Lorem ipsum dolor sat amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut Labore et dolore magna aliqua。</p>

  函数bare_extraction 可用于绕过转换并直接使用和转换原创输出:它返回元数据(作为字典)和文本和注释的Python 变量(均作为LXML 对象)。

  >>> 从 trafilatura 导入 裸提取 >>> 裸提取(已下载)

  在命令行上使用

  Trafilatura 收录一个命令行界面,无需编写代码即可轻松使用。

  $ trafilatura -u "https://www.scientificamerican.com/article/statistically-speaking-elephants-by-the-numbers/"

'帖子更新于 2013 年 8 月 13 日,上午 11:18 这是世界大象日。(谁知道?!)这里有一个关于我们称为大象的长鼻类动物正在进行的传奇的清醒更新。...' $ trafilatura -h # 显示所有可用选项

  以下参数组合允许批量下载(包括 URLlinks.txt)、在单独的目录中备份 HTML 源代码、将提取的文本转换和存储为 XML。这对于存档和进一步处理特别有用:

  $ trafilatura --inputfile links.txt --outputdir 转换/ --backup-dir html-sources/ --xml

  潜在的替代品

  虽然一些相应的 Python 包没有积极维护,但以下用于网页文本提取的替代方案包括:

  一个保持文本结构完整但不关注文本的库

  Trafilatura 具有许多有用的功能,例如元数据、文本和评论提取以及提要和站点地图中的链接发现。仅在文本提取方面,其性能已经明显优于现有替代品,请参考以下抓取质量对比:

  另一个问题可能是缺少与文档存储和处理的常见需求相对应的输出格式:库可以将结果转换为 CSV、JSON、XML 和 XMLTEI。

  参考:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线