使用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
。