python - 从 MediaWiki XML 中提取页面标题和贡献者

标签 python xml-parsing python-2.7 mediawiki elementtree

我有一个非常大的 (7GB) MediaWiki XML 转储,其中包含对 Wiki 每个页面所做的每个更改的记录。我试图记录哪些用户对每个页面做出了贡献,因此我想从 XML 中提取它。

XML 看起来像这样:

<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/">
 <page>
  <title>Unique Page title</title>
  <id>11</id>
  <restrictions>sysop</restrictions>
  <revision>
    <id>11</id>
    <timestamp>2005-10-26T02:23:03Z</timestamp>
    <contributor>
      <ip>MediaWiki default</ip>
    </contributor>
    <text xml:space="preserve">i</text>
  </revision>
 </page>
 <page> ... </page>
 <page> ... </page>
 ...
</mediawiki>

对于这么大的文件,我相信我需要使用 iterparse。现在,我只是想打印出标题,但是当我运行以下代码时,它会打印出“无”。

NS = '{http://www.mediawiki.org/xml/export-0.3/}'
from xml.etree.ElementTree import iterparse
with open('XMLFile.xml') as f:
    for event, elem in iterparse(f):
        if elem.tag == NS + 'page':
            for node in elem:
                if node.tag == NS + 'title':
                    print node.text()
        elem.clear()

最佳答案

尝试在迭代解析期间直接拉出“title”元素,而不是进行二次循环:

NS = '{http://www.mediawiki.org/xml/export-0.3/}'
from xml.etree.ElementTree import iterparse
with open('XMLFile.xml') as f:
    for event, elem in iterparse(f):
            if elem.tag == NS + 'title':
                print elem.text
            elem.clear()

似乎对我有用。

关于python - 从 MediaWiki XML 中提取页面标题和贡献者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14104552/

相关文章:

python - 为什么我的代码直接跳到其他地方?

python - 在python csv中处理带有行标题的数据

python-2.7 - Openstack:Oslo_Config NoSuchOptError for a Deprecated Name - 可能需要定义 Deprecated_Opts?

python - 访问拆分列表中的某些单词

python - 如何在 Debian/Ubuntu 中为我的 python 应用程序定义图标?

python - Django Cookiecutter 升级最佳实践

python - BeautifulSoup 用原始 xml 替换标签而不解析/转义

python - 文档元素 : line 13, 第 2 列之后的垃圾

android - 如何使用简单的 xml 解析此 xml

linux - 当我运行 cqlsh 命令时,Python Cassandra 驱动程序未安装或未安装在 PYTHONPATH 上