экспорт википедии с помощью Python

Я пытаюсь экспортировать категорию со страницы турецкой википедии, следуя http://www.mediawiki.org/wiki/Manual:Parameters_to_Special:Export. Вот код, который я использую;

# -*- coding: utf-8 -*-
import requests
from BeautifulSoup import BeautifulStoneSoup
from sys import version


link = "http://tr.wikipedia.org/w/index.php?title=%C3%96zel:D%C4%B1%C5%9FaAktar&action=submit"

def get(pages=[], category = False, curonly=True):
    params = {}
    if pages:
        params["pages"] = "\n".join(pages)
    if category:
        params["addcat"] = 1
        params["category"] = category

    if curonly:
        params["curonly"] = 1

    headers = {"User-Agent":"Wiki Downloader -- Python %s, contact: Yaşar Arabacı: [email protected]" % version}
    r = requests.post(link, headers=headers, data=params)
    return r.text

print get(category="Matematik")

Поскольку я пытаюсь получить данные из турецкой Википедии, я использовал ее URL. Другие вещи должны быть понятными. Я получаю страницу формы, которую вы можете использовать для экспорта данных вместо фактического xml. Может ли кто-нибудь увидеть, что я здесь делаю не так? Я также пробовал сделать запрос на получение.


person yasar    schedule 24.01.2013    source источник
comment
В чем проблема? У вас есть ошибки?   -  person svick    schedule 25.01.2013
comment
@svick Я получаю страницу, на которой вы можете отправить форму для получения данных вместо получения фактических данных.   -  person yasar    schedule 25.01.2013


Ответы (2)


Параметр с именем category отсутствует, имя категории должно быть в параметре catname.

Но Special: Export не был создан для ботов, он был создан для людей. Итак, если вы правильно используете catname, он снова вернет форму, на этот раз с заполненными страницами из категории. Затем вы должны снова щелкнуть «Отправить», что вернет нужный вам XML.

Я думаю, что сделать это в коде было бы слишком сложно. Было бы проще, если бы вы использовали вместо этого API. Есть несколько библиотек Python, которые могут вам в этом помочь: Pywikipediabot или wikitools.

person svick    schedule 25.01.2013

Извините, мой первоначальный ответ был ужасно ошибочным. Я неправильно понял первоначальное намерение.

Я еще немного поэкспериментировал, потому что мне было любопытно. Кажется, что приведенный выше код не обязательно неверен, на самом деле документация по специальному экспорту вводит в заблуждение. В документации указано, что использование catname и addcat добавит категории к выходным данным, но вместо этого перечисляет только страницы и категории в указанном catname внутри html-формы. Похоже, что википедия действительно требует, чтобы страницы, которые вы хотите загрузить, были явно указаны. Конечно, там документация не обязательно должна быть очень подробной по этому поводу. Я бы посоветовал вам проанализировать страницу на наличие страниц в категории, а затем явно загрузить эти страницы с помощью вашего скрипта. Я действительно вижу проблему в этом подходе с точки зрения эффективности. Из-за характера данных Википедии вы получите множество страниц, которые являются просто страницами категорий других страниц.

Кроме того, возможно, было бы быстрее использовать фактический корпус данных из Википедии, который доступен для загрузки.

Удачи!

person ravenac95    schedule 25.01.2013
comment
Но это не вернет страницы из категории Matematik, только одну страницу Matematik. - person svick; 25.01.2013