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

tor*_*ger 10 python api parsing mediawiki extraction

来源Mediawiki标记

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

这不是最好的方法,因为必须进行的案例数量很大.

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

示例是:

  • 将所有标题提取到字典中,并使用其部分对其进行哈希处理.
  • 抓住所有的interwiki链接,并将它们粘贴到一个列表中(我知道
    这可以通过API完成,但我宁愿只有一个API调用来
    减少带宽使用).
  • 提取所有图像名称并使用其部分对其进行哈希处理

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

这是mediawiki非官方规范(我发现它们的官方规范没有用).

Eug*_*ota 8

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

pediapress/mwlib:

mwlib提供了一个库,用于解析MediaWiki文章并将它们转换为不同的输出格式.维基百科的"打印/导出"功能使用mwlib来生成维基百科文章中的PDF文档.

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

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

如果您想了解它的运行方式,请参阅代码附带的测试用例.(来自git存储库的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"]
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅标记规范备用解析器.

  • 我之前看过mwlib.似乎无法找到它实际使用的一些片段,这是主要问题.我很感激教程/示例的任何链接. (2认同)