我想通过API提取所有Wikipedia标题。每个响应都包含 continue 键,该键用于获取下一个逻辑批处理,但是在30个请求后, continue 键开始重复一遍,意味着我收到的页面相同。
我已经尝试了上面的以下代码和Wikipedia文档 https://www.mediawiki.org/wiki/API:Allpages
def get_response(self, url):
resp = requests.get(url=url)
return resp.json()
appcontinue = []
url = 'https://en.wikipedia.org/w/api.php?action=query&list=allpages&format=json&aplimit=500'
json_resp = self.get_response(url)
next_batch = json_resp["continue"]["apcontinue"]
url +='&apcontinue=' + next_batch
appcontinue.append(next_batch)
while True:
json_resp = self.get_response(url)
url = url.replace(next_batch, json_resp["continue"]["apcontinue"])
next_batch = json_resp["continue"]["apcontinue"]
appcontinue.append(next_batch)
我希望收到超过10000个唯一的继续键,因为一个响应最多可以包含500个标题。 维基百科上有5,673,237篇英文文章。
实际答复。我做了600多个请求,只有30个唯一的 continue 键。
答案 0 :(得分:0)
json_resp["continue"]
包含两对值,一个为apcontinue
,另一个为continue
。您应该将它们都添加到查询中。有关更多详细信息,请参见https://www.mediawiki.org/wiki/API:Query#Continuing_queries。
此外,我认为使用params
的{{1}}参数比手动替换continue值更容易。也许是这样的:
request.get