30次请求后,Wikipedia All-Pages API返回相同的页面标题

时间:2019-05-12 17:53:57

标签: python wikipedia wikipedia-api

我想通过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 键。

1 个答案:

答案 0 :(得分:0)

json_resp["continue"]包含两对值,一个为apcontinue,另一个为continue。您应该将它们都添加到查询中。有关更多详细信息,请参见https://www.mediawiki.org/wiki/API:Query#Continuing_queries

此外,我认为使用params的{​​{1}}参数比手动替换continue值更容易。也许是这样的:

request.get