如何使用 mediawiki api 获取维基百科文章中的所有 url(不仅仅是标题)?
How to get all url's ( not just titles ) in a wikipedia article using mediawiki api?
我正在使用维基媒体 api 从维基百科文章 'https://en.wikipedia.org/w/api.php?action=query&prop=links&redirects&pllimit=500&format=json' , but it is only giving a list of link titles , for example , Artificial Intelligence , wikipedia page has a link titled " delivery networks," , but the actual URL is "https://en.wikipedia.org/wiki/Content_delivery_network" 中检索所有可能的 URL,这正是我想要的
我已经替换了我以前的大部分答案,包括代码,以使用 Tgr 的答案中提供的信息,以防其他人想要示例 Python 代码。此代码主要基于 Mediawiki 中所谓的 'raw continuations'.
的代码。
我特意将每次调用请求的链接数限制为 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 想用人工智能做类似的事情,那么他应该从 'Artificial intelligence' 开始——注意大写。否则,搜索将从一个消歧页面开始,并且可能会出现这些页面的所有复杂情况。
使用生成器:
请参阅 generators and the info
module 上的 API 文档。
我正在使用维基媒体 api 从维基百科文章 'https://en.wikipedia.org/w/api.php?action=query&prop=links&redirects&pllimit=500&format=json' , but it is only giving a list of link titles , for example , Artificial Intelligence , wikipedia page has a link titled " delivery networks," , but the actual URL is "https://en.wikipedia.org/wiki/Content_delivery_network" 中检索所有可能的 URL,这正是我想要的
我已经替换了我以前的大部分答案,包括代码,以使用 Tgr 的答案中提供的信息,以防其他人想要示例 Python 代码。此代码主要基于 Mediawiki 中所谓的 'raw continuations'.
的代码。我特意将每次调用请求的链接数限制为 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 想用人工智能做类似的事情,那么他应该从 'Artificial intelligence' 开始——注意大写。否则,搜索将从一个消歧页面开始,并且可能会出现这些页面的所有复杂情况。
使用生成器:
请参阅 generators and the info
module 上的 API 文档。