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

14

源Mediawiki标记

目前我正在使用各种正则表达式来“解析”Mediawiki标记中的数据,以便可以使用文章内的元素。

这绝不是最佳方法,因为必须进行大量的情况处理。

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

例如:

  • 提取所有标题并散列到其所在的部分的字典中。
  • 获取所有Interwiki链接,并将它们放入一个列表中(我知道这可以通过API完成,但我宁愿只有一个API调用以减少带宽使用)。
  • 提取所有图像名称并将它们与它们的部分哈希。

各种正则表达式都可以实现上述功能,但我发现需要制作的数量相当大。

这里是Mediawiki非官方规范(我认为官方规范并不太有用)。

3个回答

11

mwlib - MediaWiki解析器和实用库

pediapress/mwlib:

mwlib提供了一个解析MediaWiki文章并将其转换为不同输出格式的库。mwlib被维基百科的“打印/导出”功能所使用,以便从维基百科文章生成PDF文档。

这里是文档页面。旧版文档页面中有一个一行代码的示例:

from mwlib.uparser import simpleparse
simpleparse("=h1=\n*item 1\n*item2\n==h2==\nsome [[Link|caption]] there\n")
如果您想看它如何在实际中使用,请查看与代码一起提供的测试用例。 (从 git 存储库中的 mwlib/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"]

更多信息请参见标记规范替代解析器


2
我之前看过mwlib。但似乎找不到实际使用的一些片段,这是主要问题。如果有任何教程/示例链接,我将不胜感激。 - torger
他们似乎已经转移到了Github,请您更新链接至:https://github.com/pediapress/mwlib。 - jb.
这个例子从维基百科文本字符串中解析文章链接:https://gist.github.com/akellehe/65a040b53456d7d23544 - KeatsKelleher
1
维基百科上列出了多个解析器,网址为https://www.mediawiki.org/wiki/Alternative_parsers,其中包括多个Python解析器。 - tripleee

4
这个问题很老了,但是对于其他来到这里的人:在github上有一个用Python编写的mediawiki解析器。它似乎非常容易将文章转换为纯文本,而我以前用mwlib无法解决这个问题(如果我没记错的话)。

2

我正在寻找类似的解决方案来解析特定的维基百科,并偶然发现Pandoc,它可以处理多种输入格式并生成多种输出格式。

从该网站上了解到:

Pandoc - 一个通用文档转换器

如果您需要将文件从一种标记语言格式转换为另一种,则 Pandoc 是您的瑞士军刀。 Pandoc 可以将 markdown、reStructuredText、textile、HTML、DocBook、LaTeX、MediaWiki 标记、TWiki 标记、OPML、Emacs Org-Mode、Txt2Tags、Microsoft Word docx、EPUB 或 Haddock 标记转换为以下输出格式:

  • HTML:XHTML、HTML5 和使用 Slidy、reveal.js、Slideous、S5 或 DZSlides 的 HTML 幻灯片演示。
  • 字处理格式:Microsoft Word docx、OpenOffice/LibreOffice ODT、OpenDocument XML
  • 电子书格式:EPUB 版本 2 或 3、FictionBook2
  • 文档格式:DocBook、GNU TexInfo、Groff man 页面、Haddock 标记
  • 页面版式格式:InDesign ICML
  • 大纲格式:OPML
  • TeX 格式:LaTeX、ConTeXt、LaTeX Beamer 幻灯片
  • 通过 LaTeX 转换为 PDF
  • 轻量级标记语言格式:Markdown(包括 CommonMark)、reStructuredText、AsciiDoc、MediaWiki 标记、DokuWiki 标记、Emacs Org-Mode、Textile
  • 自定义格式:可以使用 lua 编写自定义的输出格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接