我一直在尝试创建英语维基百科的本地Mediawiki实例,以便我可以对Mediawiki API进行大量繁重而耗时的调用(例如,遍历所有页面并获取其类别和内部链接)
到目前为止它还没有解决,转储的SQL导入完成或中间进程后总是存在一些问题,所以我现在放弃了这个问题,但我正在研究另一个解决方案。
所以说我想浏览特定类别中的所有页面并获取每个页面的内部链接(它链接到的其他维基百科页面),在mwclient中很容易:
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实例通信?
答案 0 :(得分:1)
要使用API,您需要将MediaWiki与导入的数据库一起运行。
有解析原始转储的工具,但它们需要单独编码。它不是很复杂,但它是分开的。
对于Python,请参阅问题Parsing a Wikipedia dump。
Perl中还有一个很好的库:https://metacpan.org/pod/MediaWiki::DumpFile。
维基人员关注转储的可用性,因此如果您在导入转储时遇到问题,您应该在MediaWiki邮件列表中询问:https://lists.wikimedia.org/mailman/listinfo/mediawiki-l。