MWParserFromHell 是 MediaWiki wikicode 的解析器。
项目描述
mwparserfromhell (MediaWiki 解析器从地狱) 是一个 Python 包,提供了一个易于使用且功能强大的 MediaWiki wikicode 解析器。它支持 Python 3.8+。
由 Earwig 开发,并得到了 Σ、Legoktm 以及其他人的贡献。完整文档可在 ReadTheDocs 上找到。开发在 GitHub 上进行。
安装
安装解析器的最简单方法是通过Python包索引;您可以使用
pip install mwparserfromhell
安装最新版本(获取pip)。请确保您的pip已更新,尤其是在Windows上。另外,获取最新开发版本
git clone https://github.com/earwig/mwparserfromhell.git cd mwparserfromhell python setup.py install
完整的单元测试套件需要pytest(
pip install pytest
)并且可以使用python -m pytest
运行。用法
正常使用相当简单(其中
text
是页面文本)>>> import mwparserfromhell >>> wikicode = mwparserfromhell.parse(text)
wikicode
是一个mwparserfromhell.Wikicode
对象,它类似于一个普通的str
对象,并具有一些额外的方法。例如>>> text = "I has a template! {{foo|bar|baz|eggs=spam}} See it?" >>> wikicode = mwparserfromhell.parse(text) >>> print(wikicode) I has a template! {{foo|bar|baz|eggs=spam}} See it? >>> templates = wikicode.filter_templates() >>> print(templates) ['{{foo|bar|baz|eggs=spam}}'] >>> template = templates[0] >>> print(template.name) foo >>> print(template.params) ['bar', 'baz', 'eggs=spam'] >>> print(template.get(1).value) bar >>> print(template.get("eggs").value) spam
由于节点可以包含其他节点,因此获取嵌套模板是微不足道的
>>> text = "{{foo|{{bar}}={{baz|{{spam}}}}}}" >>> mwparserfromhell.parse(text).filter_templates() ['{{foo|{{bar}}={{baz|{{spam}}}}}}', '{{bar}}', '{{baz|{{spam}}}}', '{{spam}}']
您还可以传递
recursive=False
到filter_templates()
并手动探索模板。这是可能的,因为节点可以包含额外的Wikicode
对象>>> code = mwparserfromhell.parse("{{foo|this {{includes a|template}}}}") >>> print(code.filter_templates(recursive=False)) ['{{foo|this {{includes a|template}}}}'] >>> foo = code.filter_templates(recursive=False)[0] >>> print(foo.get(1).value) this {{includes a|template}} >>> print(foo.get(1).value.filter_templates()[0]) {{includes a|template}} >>> print(foo.get(1).value.filter_templates()[0].get(1).value) template
模板可以轻松修改以添加、删除或更改参数。
Wikicode
对象可以像列表一样处理,有append()
、insert()
、remove()
、replace()
等方法。它们还有一个matches()
方法,用于比较页面或模板名称,它会处理大小写和空白>>> text = "{{cleanup}} '''Foo''' is a [[bar]]. {{uncategorized}}" >>> code = mwparserfromhell.parse(text) >>> for template in code.filter_templates(): ... if template.name.matches("Cleanup") and not template.has("date"): ... template.add("date", "July 2012") ... >>> print(code) {{cleanup|date=July 2012}} '''Foo''' is a [[bar]]. {{uncategorized}} >>> code.replace("{{uncategorized}}", "{{bar-stub}}") >>> print(code) {{cleanup|date=July 2012}} '''Foo''' is a [[bar]]. {{bar-stub}} >>> print(code.filter_templates()) ['{{cleanup|date=July 2012}}', '{{bar-stub}}']
然后,通过在它上面调用
str()
将其转换回一个普通的str
对象(用于保存页面!)>>> text = str(code) >>> print(text) {{cleanup|date=July 2012}} '''Foo''' is a [[bar]]. {{bar-stub}} >>> text == code True
限制
虽然MediaWiki解析器生成HTML并可以访问模板内容等,但mwparserfromhell仅作为源代码的直接接口。这有几个含义
无法检测由模板转译产生的语法元素。例如,想象一个假设的页面
"Template:End-bold"
,其中包含文本</b>
。虽然MediaWiki会正确理解<b>foobar{{end-bold}}
表示<b>foobar</b>
,但mwparserfromhell没有检查{{end-bold}}
内容的方法。相反,它会将粗体标签视为未完成,可能延伸到页面的更下方。与外部链接相邻的模板,如
http://example.com{{foo}}
,被视为链接的一部分。实际上,这取决于模板的内容。当不同的语法元素交叉时,如
{{echo|''Hello}}, world!''
,解析器会感到困惑,因为这不能用普通的语法树来表示。相反,解析器会将第一个语法结构视为纯文本。在这种情况下,只有斜体标签会被正确解析。解决方案:由于这种情况通常与文本格式化有关,而文本格式化通常对用户不感兴趣,您可以在
mwparserfromhell.parse()
中传递skip_style_tags=True
。这将''
和'''
视为纯文本。mwparserfromhell的未来版本可能包括多个解析模式,以更合理地绕过此限制。
此外,解析器缺乏对某些wiki特定设置的感知
单词结尾链接不受支持,因为链接尾随规则是语言特定的。
未识别本地化命名空间名称,因此文件链接(如
[[File:...]]
)被视为普通维基链接。任何看起来像XML标签的东西都被视为标签,即使它不是已识别的标签名称,因为有效标签的列表取决于已加载的MediaWiki扩展。
集成
mwparserfromhell 由 EarwigBot 使用,最初是为其开发的;Page 对象有一个 parse 方法,该方法本质上会在 page.get() 上调用 mwparserfromhell.parse()。
如果您正在使用 Pywikibot,则您的代码可能如下所示
import mwparserfromhell
import pywikibot
def parse(title):
site = pywikibot.Site()
page = pywikibot.Page(site, title)
text = page.get()
return mwparserfromhell.parse(text)
如果您没有使用库,可以使用以下 Python 3 代码解析任何页面(使用 API 和 requests 库)
import mwparserfromhell
import requests
API_URL = "https://en.wikipedia.org/w/api.php"
def parse(title):
params = {
"action": "query",
"prop": "revisions",
"rvprop": "content",
"rvslots": "main",
"rvlimit": 1,
"titles": title,
"format": "json",
"formatversion": "2",
}
headers = {"User-Agent": "My-Bot-Name/1.0"}
req = requests.get(API_URL, headers=headers, params=params)
res = req.json()
revision = res["query"]["pages"][0]["revisions"][0]
text = revision["slots"]["main"]["content"]
return mwparserfromhell.parse(text)
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码发行版
构建发行版
mwparserfromhell-0.6.6.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 71afec1e9784ba576e95d6f34845582d3c733a3a52ba770dd8a9c3a40e5b649f |
|
MD5 | a93a031436cdd62995d04c4ff79e4458 |
|
BLAKE2b-256 | 47aa358f9af602b743ac8898353f240f678b69722801bd0625507c69d9755936 |
哈希值 for mwparserfromhell-0.6.6-cp312-cp312-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cdc46c115b2495d4025920b7b30a6885a96d2b797ccc4009bf3cc02940ae55d3 |
|
MD5 | 191670c14db11c6709333150b114a4fe |
|
BLAKE2b-256 | 780924c2f37524a3ebc3574975766748c7e4423ecefaa815c9fc4a324cbcf94a |
哈希值 for mwparserfromhell-0.6.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2b75fae6d01c8fda19dbf127175122d7aa2964ef6454690e6868bbc3d80a7bc1 |
|
MD5 | 443d9a2e985429b72efca7c6b690e4d7 |
|
BLAKE2b-256 | 7a396bd8d9678e8b3f57babee36b5a9540db8cccba1b81a64ed56576c653994b |
哈希值 for mwparserfromhell-0.6.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d2febd92a55a3f19b461833267726cb81429c3d6cb0006ad1691dfa849789e5d |
|
MD5 | bd57217092d984e6160587f2c994b877 |
|
BLAKE2b-256 | bcabda1b51303f0457c8cd343cf2d9a66fd0c5654fe8d0331c8107751459191f |
哈希值 for mwparserfromhell-0.6.6-cp312-cp312-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 910d36bc70e8bea758380e75c12fd47626b295abec9f73a6099d8f937a649e77 |
|
MD5 | 39baa3cb68857e7a5039ea48f6f40f9b |
|
BLAKE2b-256 | 61c0059513420490a2d96b470d4f560445d89f022a4749a20a952bfb002e2915 |
哈希值 for mwparserfromhell-0.6.6-cp311-cp311-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 063c1e79befd1f55d77c358e0f5006f5ecf88ddf218ff6af55188d686139330e |
|
MD5 | 2eba4ecc98106032854f1276a3955c87 |
|
BLAKE2b-256 | 305116b6381021d3bb5ce1a277fd3334f7155f4aed1885e22eae78f4bfa07923 |
哈希值 for mwparserfromhell-0.6.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 007d0859e5467241b73c6e974df039a074609ce4e2b9df8c2263a8920554d032 |
|
MD5 | 4229d9dc165768afa2d8e96b7a51797b |
|
BLAKE2b-256 | 9b1ed3e3ff290be89135854c5945953c8fd9615388e795de1eb3da71e1a5b9ca |
哈希值 for mwparserfromhell-0.6.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 59633d3cc09993af75ced8dfbd6800e1e38e64620851a095575621548448875c |
|
MD5 | 60d4b3856bca44512ae36f9662a16049 |
|
BLAKE2b-256 | bd67cbe2512d3ad77520fa869aaf14f3bd76402ca9d0d11c3068386d0eb75696 |
哈希值 for mwparserfromhell-0.6.6-cp311-cp311-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fff66e97f7c02aa0fd57ff8f702977a9c5a1d72ef55b64ee9b146291e4c41057 |
|
MD5 | 7e2cd6ab0f73d44ade66a605273008fa |
|
BLAKE2b-256 | 19151eb4fc9d68747885fb08f431de74a77a9b04851c141d58507ed337e721b2 |
哈希值 for mwparserfromhell-0.6.6-cp310-cp310-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6a89edf53f15877223d923e122e9a97f3f7b85f56dc56d91a3d77b89c9dd4126 |
|
MD5 | 73532185fd8fbd0d001b7b691959227f |
|
BLAKE2b-256 | fb34d9c24046343296c076ab3b093b3a0081318b86c1d1396ec6f308805003a3 |
哈希值 为 mwparserfromhell-0.6.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9136696d6b29838adcf8f428e3f7028b2c6e788fc05fe1beeb4b135429c356df |
|
MD5 | 4d0b235362f24ec9f474a66679b31967 |
|
BLAKE2b-256 | 94c623cf7c7525af4c70573c6a86a576daa4815b0fa3385a5b62eeef0b5cd0d6 |
哈希值 为 mwparserfromhell-0.6.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ebc70f8a24aa60e54728be740f1c12a4acb1b12d1cc947d87b067cc1c83339fd |
|
MD5 | ba88488ec4cc860124241ee3b39ddce9 |
|
BLAKE2b-256 | 4e694fd2699c1d2db1a86e8ca02b5f1af7f49ab50c4da924c95d2dfd3be8c936 |
哈希值 为 mwparserfromhell-0.6.6-cp310-cp310-macosx_11_0_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d6995b9cfe6ec79556db0232a39210ac11aa69ee304cfc95b29c51be381e202b |
|
MD5 | 2f7ddc4fb36829632015a859f42e1ec7 |
|
BLAKE2b-256 | 70ac91a87496212f8909f983f6f057ddd1b4ba897bf48a67e4fdecc50d37b0ec |
哈希值 为 mwparserfromhell-0.6.6-cp39-cp39-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1960bcc5115ea57427df130150edf1dbfc2fb03465e548e630bb6eb37976d793 |
|
MD5 | b802d9a58f5df5667b3a286e18f3b39e |
|
BLAKE2b-256 | 720af4583a92d3489d5cbc256b12b5c88c65fb5f259d5ed0448f78f8f9f30c24 |
哈希值 为 mwparserfromhell-0.6.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1915fe4f5e5ae34f16242d4cd98da2adc81a810ab94105ec2af3dc95d7ce74aa |
|
MD5 | f97ada256db3973140cbb3a81b7e5c2d |
|
BLAKE2b-256 | cf73be45e97670103132f37d20efde2e8d391505eace17ba1962bdf1fa52212e |
哈希值 为 mwparserfromhell-0.6.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 50c482e703d2d51401f7e36a71ae9493901f170225940196292f97398713dde5 |
|
MD5 | a6f4686a7ca40a8f81a04c327454aff9 |
|
BLAKE2b-256 | ffb0b47287759839cb1f3da9946c2b73f4ad324dffd319020371846d1fe3499f |
哈希值 为 mwparserfromhell-0.6.6-cp39-cp39-macosx_11_0_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 746bad799179684994ecee72a26352e0bbe2b697f6a7e35dc5ad151606bcb8ab |
|
MD5 | 289e8a168456d7cadf7daed8c70e4289 |
|
BLAKE2b-256 | 0e3fca66ec2a86be83cbd107d12e7d8edc139ad0c18b1361123a6c311662f420 |
哈希值 为 mwparserfromhell-0.6.6-cp38-cp38-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e28ffa9a7e0748ec64002a84234201ef69c2d4a710508baf9cc25f4ee274c6bd |
|
MD5 | fe98eb5a750e83f7dad392951363c828 |
|
BLAKE2b-256 | dafd73684ae8ba1dba96061d17764481a9112910c77aa5e72c15a2da1050d36a |
哈希值 为 mwparserfromhell-0.6.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1d2422659abb29191a0fa096cf8bead837ac3ecd343065569b2acc7a84ecf866 |
|
MD5 | 48c77db8f7784738d7ea4479d5e80730 |
|
BLAKE2b-256 | 7ec15780c084c0626735e330c6150ef4acb0f73f8b6b0720d79198ef6fb32483 |
哈希值 为 mwparserfromhell-0.6.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 03e03b8bec729af850457d045b04d0c9d3e296ff8bf66b455f754cccb29c3bea |
|
MD5 | c44defb199883802a455eccb48c2202d |
|
BLAKE2b-256 | a3f281c29426e1b6ec55111b068603d38188b9b067503c2ac0f95deac1363b9b |
哈希值 为 mwparserfromhell-0.6.6-cp38-cp38-macosx_11_0_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fd05481adc0806f4b8f8f8cb309ec56924b17ce386cb1c2f73919d8a012e6b16 |
|
MD5 | a8352662d56aefe28443cb5128549fc5 |
|
BLAKE2b-256 | 15b798e5e4fc94270cc6ec20261081b21daf0f9dda8db53003848b0794547daa |