我有一个非常大的 (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/