如何通过 python 从 mediawiki 标记文章中解析/提取数据
·
问题:如何通过 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"]
另请参阅标记规范和替代解析器了解更多信息。
更多推荐

所有评论(0)