如何使用mediawiki api获取维基百科条目中的所有url(不仅仅是标题)?



我正在使用维基媒体api从维基百科文章中检索所有可能的URL,'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",这就是我想要

使用生成器:

action=query& format=jsonfm& titles=Estelle_Morris& redirects& generator=links& gpllimit=500& prop=info& inprop=url

请参阅有关生成器和info模块的 API 文档。

我已经替换了我之前的大部分答案,包括代码,以使用 TGR 答案中提供的信息,以防其他人想要示例 Python 代码。这段代码在很大程度上基于Mediawiki的代码,用于所谓的"原始延续"。

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

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想对人工智能做类似的事情,那么他应该从"人工智能"开始——注意大写。否则,搜索将从消除歧义页面以及这些页面可能出现的所有复杂性开始。

最新更新