загружайте статьи из википедии с помощью специального экспорта

#python #xml #wikipedia #wikimedia

#python #xml #википедия #викимедиа

Вопрос:

Я хочу иметь возможность загружать полные истории нескольких тысяч статей с http://en.wikipedia.org/wiki/Special:Export и я ищу программный подход к его автоматизации. Я хочу сохранить результат в формате XML.

Вот мой запрос в Википедии. Я начал следующее на Python, но это не дало никакого полезного результата.

 #!/usr/bin/python

import urllib
import codecs

f =  codecs.open('workfile.xml', 'w',"utf-8" )

class AppURLopener(urllib.FancyURLopener):
    version = "Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11"
urllib._urlopener = AppURLopener()

query = "http://en.wikipedia.org/w/index.php?title=Special:Exportamp;action=submit"
data = { 'catname':'English-language_Indian_films','addcat':'', 'wpDownload':1 }
data = urllib.urlencode(data)
f = urllib.urlopen(query, data)
s = f.read()
print (s)
 

Комментарии:

1. Почему результат не является полезным? Что вы ожидали получить?

2. Пожалуйста, не используйте некорректный пользовательский агент, если это не является абсолютно необходимым. Википедия должна работать с любым непустым пользовательским агентом.

3. @svick: Это не совсем так — некоторые строки пользовательского агента занесены в черный список. Досадно, что это включает, например, строку пользовательского агента libwww-perl по умолчанию; Я бы не удивился, обнаружив в списке строку UA по умолчанию для Python urllib.

4. @IlmariKaronen, да, ты прав. Но любой пользовательский агент, который вы предоставляете себе для идентификации вашего приложения, должен быть в порядке.

5. @ekhumoro Я хочу загрузить XML-файл.

Ответ №1:

Я бы честно предложил использовать Mechanize для получения страницы, а затем использовать lxml или другой анализатор xml для получения нужной информации. Обычно я использую пользовательский агент firefox, поскольку многие пользовательские агенты программы заблокированы. Обратите внимание, что с Mechanize вы можете фактически заполнить форму и «нажать» enter, затем «нажать» export.