维基百科HTML数据包解析
项目描述
mwparserfromhtml
mwparserfromhtml
是一个Python库,用于解析和挖掘由 维基媒体企业 最近发布的 Enterprise HTML 数据包中的元数据。可以通过 此位置 访问最新的6个Enterprise HTML数据包。该库的目的是提供一个接口来处理这些HTML数据包,并从文章中提取最相关的特征。
除了使用HTML存档之外,用户还可以使用维基百科API通过文章标题获取特定文章的HTML,并使用这个库解析HTML字符串。
动机
在渲染内容时,MediaWiki会将维基文本转换为HTML,从而允许宏的扩展以包含更多内容。维基百科页面的HTML版本通常比原始源维基文本包含更多信息。因此,任何希望分析维基百科内容(如读者所见)的人都会更愿意使用HTML而不是维基文本。传统上,只有在XML存档中提供了维基文本版本。现在,随着2021年企业HTML存档的引入,任何人都可以轻松访问和使用HTML存档(而且应该使用)。
然而,解析HTML以提取必要信息并不是一个简单的过程。一个不起眼的用户可能知道如何处理HTML,但他们可能不熟悉存档文件的特定格式。此外,MediaWiki API转换成的HTML有很多边缘情况,需要深入研究文档才能了解其结构。从HTML中识别功能并非易事!由于所有这些麻烦,个人可能会继续使用维基文本,因为已经存在针对它的优秀现成解析器(如mwparserfromhell)。因此,我们想编写一个Python库,可以有效地解析来自维基媒体企业存档的文章HTML代码,提取相关的元素,如文本、链接、模板等。这有望降低使用HTML存档的技术门槛,并赋予研究人员和其他人利用这一有益资源的能力。
特性
- 迭代大型HTML存档tarball,而无需将它们提取到内存中(内存高效,但除非转换为列表,否则不可索引)
- 提取主要文章元数据,如分类、模板、维基链接、外部链接、媒体、参考文献等,以及它们各自类型和状态信息
- 轻松从HTML存档中提取文章内容,并自定义详细程度
- 为存档中的文章生成汇总统计信息
安装
您可以使用pip
安装mwparserfromhtml
$ pip install mwparserfromhtml
基本用法
查看example_notebook.ipynb
以获取可运行的示例。
- 从库中导入存档模块并加载存档
from mwparserfromhtml import HTMLDump
html_file_path = "TARGZ_FILE_PATH"
html_dump = HTMLDump(html_file_path)
- 迭代存档中的文章
for article in html_dump:
print(article.get_title())
- 从存档中提取文章的纯文本,即移除任何非文本内容,如信息框、引用脚注或分类,并将链接替换为其锚文本
for article in html_dump:
print(article.get_title())
prev_heading = "_Lead"
for heading, paragraph in article.html.wikistew.get_plaintext(exclude_transcluded_paragraphs=True,
exclude_para_context=None, # set to {"pre-first-para", "between-paras", "post-last-para"} for more conservative approach
exclude_elements={"Heading", "Math", "Citation", "List", "Wikitable", "Reference"}):
if heading != prev_heading:
print(f"\n{heading}:")
prev_heading = heading
print(paragraph)
- 从存档中提取模板、分类、维基链接、外部链接、媒体、参考文献等
for article in html_dump:
print(article.html.wikistew.get_templates())
print(article.html.wikistew.get_categories())
print(article.html.wikistew.get_wikilinks())
print(article.html.wikistew.get_externallinks())
print(article.html.wikistew.get_images())
print(article.html.wikistew.get_references())
- 或者,您可以对独立的Parsoid HTML进行处理,例如来自API的,并将其转换为
Article
对象以提取功能
from mwparserfromhtml import Article
import requests
lang = "en"
title = "Both Sides, Now"
r = requests.get(f'https://{lang}.wikipedia.org/api/rest_v1/page/html/{title}')
article = Article(r.text)
print(f"Article Name: {article.get_title()}")
print(f"Abstract: {article.wikistew.get_first_paragraph()}")
项目信息
致谢
该项目于2022年5月至8月作为Outreachy实习项目启动。该项目从Earwig(mwparserfromhell)和Slavina Stefanova(mwsql)的工作中受益良多。
项目详情
下载文件
下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。