Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何读取维基百科转储文件,就像如何通过Mediawiki API获取信息一样?_Api_Parsing_Wikipedia_Wikipedia Api - Fatal编程技术网

如何读取维基百科转储文件,就像如何通过Mediawiki API获取信息一样?

如何读取维基百科转储文件,就像如何通过Mediawiki API获取信息一样?,api,parsing,wikipedia,wikipedia-api,Api,Parsing,Wikipedia,Wikipedia Api,我一直在尝试创建一个英语维基百科的本地Mediawiki实例,这样我就可以对Mediawiki API进行大量繁重而耗时的调用(例如,迭代所有页面并获取它们的类别和内部链接) 到目前为止还没有解决,在完成转储的SQL导入后或在导入过程中总是会出现一些问题,所以我现在放弃这一点,但正在寻找另一种解决方案 因此,假设我想浏览特定类别中的所有页面,并获取每个页面的内部链接(它链接到的其他维基百科页面),很容易: import mwclient site = mwclient.Site('en.wiki

我一直在尝试创建一个英语维基百科的本地Mediawiki实例,这样我就可以对Mediawiki API进行大量繁重而耗时的调用(例如,迭代所有页面并获取它们的类别和内部链接)

到目前为止还没有解决,在完成转储的SQL导入后或在导入过程中总是会出现一些问题,所以我现在放弃这一点,但正在寻找另一种解决方案

因此,假设我想浏览特定类别中的所有页面,并获取每个页面的内部链接(它链接到的其他维基百科页面),很容易:

import mwclient
site = mwclient.Site('en.wikipedia.org')

def getPages(c, p):
    for page in c:
        if page.namespace == 0:
            p.append(page)
        elif page.namespace == 14:
            getPages(page, p)
        else:
            pass

pages = []
c1 = site.Pages["Category:Mathematics"]
getPages(c1, pages)

但它要求我有一个运行的维基百科副本,所以我想知道是否有一个类似的简单解决方案可以针对转储(XML、SQL、DBPedia或其他转储表单)执行,而不是与Mediawiki实例通信?

要使用需要在导入数据库中运行Mediawiki的API

有用于解析原始转储的工具,但它们需要单独编码。这不是很复杂,但它是分开的

关于Python,请参见问题

Perl中还有一个很好的库:

Wikimedia关心转储文件的可用性,因此如果导入转储文件时遇到问题,您应该在MediaWiki邮件列表中询问