问题:如何通过 python 从 mediawiki 标记文章中解析/提取数据

来源 Mediawiki 标记

现在,我正在使用各种正则表达式将 mediawiki 标记中的数据“解析”为列表/字典,以便可以使用文章中的元素。

这几乎不是最好的方法,因为必须制作的案例数量很大。

如何将一篇文章的 mediawiki 标记解析为各种 python 对象,以便可以使用其中的数据?

示例是:

  • 将所有标题提取到字典中,并对其部分进行哈希处理。

  • 获取所有跨维基链接,并将它们粘贴到列表中(我知道

这可以通过 API 完成,但我宁愿只有一个 API 调用

减少带宽使用)。

  • 提取所有图像名称并将它们与它们的部分一起散列

各种正则表达式可以实现上述目的,但我发现我必须使数字相当大。

这是mediawiki 非官方规范(我不认为他们的官方规范有用)。

解答

mwlib - MediaWiki 解析器和实用程序库

pediapress/mwlib:

mwlib 提供了一个库,用于解析 MediaWiki 文章并将它们转换为不同的输出格式。 mwlib 用于从 Wikipedia 文章中生成 PDF 文档。

这是文档页面。使用的旧文档页面有一个单行示例:

from mwlib.uparser import simpleparse
simpleparse("=h1=\n*item 1\n*item2\n==h2==\nsome [[Link|caption]] there\n")

如果您想了解它是如何在实际中使用的,请查看代码附带的测试用例。 (来自 git 存储库](https://github.com/pediapress/mwlib/blob/c41330f95e0e780026159ae95402b6d00511e05c/tests/test_parser.py)的[mwlib/tests/test_parser.py ):

from mwlib import parser, expander, uparser
from mwlib.expander import DictDB
from mwlib.xfail import xfail
from mwlib.dummydb import DummyDB
from mwlib.refine import util, core

parse = uparser.simpleparse

def test_headings():
    r=parse(u"""
= 1 =
== 2 ==
= 3 =
""")

    sections = [x.children[0].asText().strip() for x in r.children if isinstance(x, parser.Section)]
    assert sections == [u"1", u"3"]

另请参阅标记规范和替代解析器了解更多信息。

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐