Я пытаюсь разобрать дамп XML из Викисловаря, но, вероятно, я чего-то не хватает, так как я ничего не получаю в качестве вывода.Разбор XML-дампа MediaWiki wiki
Это аналогично, но намного короче XML-файл:
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.8/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.8/ http://www.mediawiki.org/xml/export-0.8.xsd" version="0.8" xml:lang="it">
<page>
<title>bigoto</title>
<ns>0</ns>
<id>24840</id>
<revision>
<id>1171207</id>
<parentid>743817</parentid>
<timestamp>2011-12-18T19:26:42Z</timestamp>
<contributor>
<username>GnuBotmarcoo</username>
<id>14353</id>
</contributor>
<minor />
<comment>[[Wikizionario:Bot|Bot]]: Sostituisco template {{[[Template:in|in]]}}</comment>
<text xml:space="preserve">== wikimarkups ==</text>
<sha1>gji6wqnsy6vi1ro8887t3bikh7nb3fr</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
</revision>
</page>
</mediawiki>
Я интерес в анализе содержания <title>
элемента, если <ns>
элемент равен 0.
Это мой сценарий
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
for page in root.findall('page'):
ns = int(page.find('ns').text)
word = page.find('title').text
if ns == 0:
print word
Это работает с небольшим файлом xml. Но тогда, когда я разбираю длинный (128mb) xml дамп, скрипт сбой ... или в списке, я думаю, что он разбился, так как он не завершил работу после более двух часов. Есть ли какая-либо стратегия, чтобы заставить ее работать с очень большими файлами? – CptNemo
Ах, BeautifulSoup имеет тенденцию быть очень медленным при работе с большими файлами - в этом случае вы можете использовать 'lxml'. То, что вы могли бы сделать, это запустить BeautifulSoup поверх XML-анализатора 'lxml' - я обновил свой ответ, чтобы показать, как вы это делаете в конструкторе BeautifulSoup, добавив в качестве второго аргумента' 'xml ''. – jdotjdot
Теперь я получил ошибку 'TypeError: неподдерживаемый тип операндов для +: 'NoneType' и' 'str' с этой строкой: soup = 'BS (open (" itwiktionary-20130507-pages-articles.xml "), "XML") '. Я делаю что-то неправильно? – CptNemo