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 的表单页面。谁能看到我在这里做错了什么?我也尝试过提出获取请求。

4

2 回答 2

1

没有参数named category,类名应该在catname参数中。

但Special:Export 不是为机器人构建的,它是为人类构建的。因此,如果您使用catname正确,它将再次返回表单,这次将填写类别中的页面。然后您应该再次单击“提交”,这将返回您想要的 XML。

我认为在代码中这样做太复杂了。如果你改用 API 会更容易。有一些 Python 库可以帮助您:Pywikipediabotwikitools

于 2013-01-25T14:00:26.450 回答
0

抱歉,我原来的答案存在严重缺陷。我误解了最初的意图。

我做了一些更多的实验,因为我很好奇。您上面的代码似乎不一定不正确,实际上,特殊导出文档具有误导性。该文档指出使用catname并将addcat类别添加到输出中,但它仅列出指定范围内的页面和类别catname在 html 表单中。似乎维基百科实际上要求明确指定您希望下载的页面。诚然,那里的文档在这个问题上似乎并不十分详尽。我建议您解析该类别中页面的页面,然后使用您的脚本明确下载这些页面。我确实看到这种方法在效率方面存在问题。由于维基百科数据的性质,你会得到很多页面,它们只是其他页面的类别页面。

顺便说一句,使用 Wikipedia 中可供下载的实际数据语料库可能会更快。

祝你好运!

于 2013-01-25T06:36:19.137 回答