如何使用mediawiki api获取维基百科文章中的所有网址(不仅仅是标题)?

时间:2017-07-29 07:21:22

标签: api mediawiki wikipedia

我使用wikimedia api从维基百科文章“https://en.wikipedia.org/w/api.php?action=query&prop=links&redirects&pllimit=500&format=json”中检索所有可能的URL,但它只提供链接标题列表,例如,人工智能,维基百科页面有一个标题为链接的链接“投放网络”,但实际网址是“https://en.wikipedia.org/wiki/Content_delivery_network”,这就是我想要的

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

我已经替换了我以前的大多数答案,包括代码,以使用Tgr的答案中提供的信息,以防其他人想要示例Python代码。此代码主要基于Mediawiki的代码,用于所谓的原始延续'。

我故意将每次调用请求的链接数量限制为5个,以便可以证明还有一个参数可能性。

import requests

def query(request):
    request['action'] = 'query'
    request['format'] = 'json'
    request['prop'] = 'info'
    request['generator'] = 'links'
    request['inprop'] = 'url'
    previousContinue = {}
    while True:
        req = request.copy()
        req.update(previousContinue)
        result = requests.get('http://en.wikipedia.org/w/api.php', params=req).json()
        if 'error' in result:
            raise Error(result['error'])
        if 'warnings' in result:
            print(result['warnings'])
        if 'query' in result:
            yield result['query']
        if 'continue' in result:
            previousContinue = {'gplcontinue': result['continue']['gplcontinue']}
        else:
            break

count = 0        
for result in query({'titles': 'Estelle Morris', 'gpllimit': '5'}):
    for url in [_['fullurl'] for _ in list(result.values())[0].values()]:
        print (url)

我在第一个答案中提到,如果OP希望用人工智能做类似事情,那么他应该从“人工智能”开始。 - 注意资本化。否则,搜索将从消歧页面开始,以及那些可能出现的所有复杂情况。