1

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ı: yasar11732@gmail.com" % version}
    r = requests.post(link, headers=headers, data=params)
    return r.text

print get(category="Matematik")

トルコのウィキペディアからデータを取得しようとしているので、その URL を使用しました。他のことは自明であるべきです。実際の xml の代わりにデータをエクスポートするために使用できるフォーム ページを取得しています。ここで私が間違っていることを誰かが見ることができますか? また、get リクエストを作成してみました。

4

2 に答える 2

1

という名前のパラメータはありません。categoryカテゴリ名がcatnameパラメータに含まれている必要があります。

しかし、Special:Export はボット用に構築されたものではなく、人間用に構築されたものです。したがって、catname正しく使用すると、今度はカテゴリのページが入力されたフォームが再び返されます。次に、[送信] をもう一度クリックすると、必要な XML が返されます。

これをコードで行うのは複雑すぎると思います。代わりに API を使用した方が簡単です。これに役立つ Python ライブラリがいくつかあります: Pywikipediabotまたはwikitools

于 2013-01-25T14:00:26.450 に答える
0

申し訳ありませんが、私の元の回答にはひどく欠陥がありました。本来の意図を誤解していました。

気になったのでさらに実験してみました。上記のコードは必ずしも正しくないようです。実際、Special Export のドキュメントは誤解を招くものです。ドキュメントには、 および を使用するcatnameaddcatカテゴリが出力に追加されると記載されていますが、代わりに、指定された範囲内のページとカテゴリのみが一覧表示されます。catnamehtmlフォーム内。ウィキペディアでは、ダウンロードするページを明示的に指定する必要があるようです。確かに、そこにあるドキュメントは必ずしもその問題について非常に完全であるようには見えません。カテゴリ内のページのページを解析し、スクリプトを使用してそれらのページを明示的にダウンロードすることをお勧めします。効率の点で、このアプローチには問題があります。ウィキペディアのデータの性質上、他のページの単なるカテゴリ ページであるページが多数表示されます。

余談ですが、ダウンロード可能なウィキペディアの実際のデータ コーパスを使用する方が速い可能性があります。

幸運を!

于 2013-01-25T06:36:19.137 に答える