维基百科 All-Pages API 30 次请求后 returns 相同页面标题
Wikipedia All-Pages API after 30 requests returns same pages titles
我想通过 API.Each 响应包含 continue 键提取所有维基百科标题,该键用于获取下一个逻辑批次,但在 30 次请求后 continue 键开始重复这意味着我收到相同的页面。
我已经尝试了上面的以下代码和维基百科文档
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 个唯一的 continue 密钥,因为一个响应最多可以包含 500 个标题。
维基百科有 5,673,237 篇英文文章。
实际响应。我做了 600 多个请求,但只有 30 个唯一的 continue 键。
json_resp["continue"]
包含两对值,一对是apcontinue
,一对是continue
。您应该将它们都添加到您的查询中。有关详细信息,请参阅 https://www.mediawiki.org/wiki/API:Query#Continuing_queries。
此外,我认为使用 request.get
的 params
参数比手动替换连续值更容易。也许是这样的:
import requests
def get_response(url, params):
resp = requests.get(url, params)
return resp.json()
url = 'https://en.wikipedia.org/w/api.php?action=query&list=allpages&format=json&aplimit=500'
params = {}
while True:
json_resp = get_response(url, params)
params = json_resp["continue"]
...
我想通过 API.Each 响应包含 continue 键提取所有维基百科标题,该键用于获取下一个逻辑批次,但在 30 次请求后 continue 键开始重复这意味着我收到相同的页面。
我已经尝试了上面的以下代码和维基百科文档 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 个唯一的 continue 密钥,因为一个响应最多可以包含 500 个标题。 维基百科有 5,673,237 篇英文文章。
实际响应。我做了 600 多个请求,但只有 30 个唯一的 continue 键。
json_resp["continue"]
包含两对值,一对是apcontinue
,一对是continue
。您应该将它们都添加到您的查询中。有关详细信息,请参阅 https://www.mediawiki.org/wiki/API:Query#Continuing_queries。
此外,我认为使用 request.get
的 params
参数比手动替换连续值更容易。也许是这样的:
import requests
def get_response(url, params):
resp = requests.get(url, params)
return resp.json()
url = 'https://en.wikipedia.org/w/api.php?action=query&list=allpages&format=json&aplimit=500'
params = {}
while True:
json_resp = get_response(url, params)
params = json_resp["continue"]
...