使用Python导出wikipedia

使用Python导出wikipedia,python,mediawiki,python-requests,Python,Mediawiki,Python Requests,我试图通过以下方式从土耳其维基百科页面导出一个类别。这是我正在使用的代码 # -*- 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" de

我试图通过以下方式从土耳其维基百科页面导出一个类别。这是我正在使用的代码

# -*- 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请求。

很抱歉,我最初的回答有严重缺陷。我误解了原意

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

另一方面,使用维基百科提供的可供下载的实际数据集可能会更快


祝你好运

对不起,我最初的回答有严重的缺陷。我误解了原意

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

另一方面,使用维基百科提供的可供下载的实际数据集可能会更快


祝你好运

没有名为
category
的参数,类别名称应位于
catname
参数中

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


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

没有名为
category
的参数,类别名称应该在
catname
参数中

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


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

有什么问题吗?你有什么错误吗?@svick我得到了一个页面,你可以在那里提交表单,获取数据,而不是获取实际数据。有什么问题吗?您是否有任何错误?@svick我正在获取一个页面,您可以在其中提交表单以获取数据,而不是获取实际数据。但这不会返回类别
Matematik
中的页面,只返回单个页面
Matematik
。但这不会返回类别
Matematik
中的页面,只有一页
Matematik