我需要使用 Python 从 API 中提取所有数据,但每个页面仅包含 100 个结果,并且我无法确定如何使用 WHILE 循环返回每个页面,以便我可以将所有数据放入单个数据框中。 api以url格式设置,“https://www.api.url.com/sessions?apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31&page=1&country=US”
页面和国家/地区都是可选参数。
我尝试更改 api url,例如“page=1:160”和“page=1-160”,但它只返回第一页。
然后我尝试将页面参数添加为单独的语句,这会返回名称错误;
输入:
response = requests.get("https://www.api.url.com/sessions?
apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31",
params={'page': page}))
data = response.json()
df=pd.DataFrame(data['Sessions'])
pd.options.display.max_rows = 2000
输出:
NameError name 'page' is not defined
接下来,我尝试运行相同的代码,但从所有者指定的 API 格式开始,但收到了非常相似的错误消息;
输入:
r_sessions = requests.get("https://www.api.url.com/sessions?
apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31").json()
num_pages=r_sessions['last_page']
for page in range(2, num_pages + 1):
r_sessions = requests.get("https://www.api.url.com/sessions?
apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31", params={'page': page}).json()
print(r_sessions['page'])
输出:
KeyError 'last_page'
我期望获得一个包含 API 的所有结果的数据框,即使它们是分页的。但是,每次 API 调用一次最多只能获取一页。我知道我需要循环它,但我不知道如何循环,因为我不知道有多少页。
最佳答案
- 该页面是预期的,因为在定义字典时,您在键上使用了单引号,而不是在值上使用了单引号,因此会出现错误。没有单引号或双引号 python 认为这是一个 undefined variable
正确的代码,没有页面错误:
response = requests.get("https://www.api.url.com/sessions?
apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31",
params={'page': 'page'}))
data = response.json()
df=pd.DataFrame(data['Sessions'])
pd.options.display.max_rows = 2000
- 收到的 json 中不存在 r_session 键。您可以使用下面的简单代码来检查 json 中的顶级 key 。
r_sessions = requests.get("https://www.api.url.com/sessions?apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31").json()
对于 r_sessions 中的 i:
打印(i)
关于python - 如何在 Python 中循环 GET 请求以从数据帧中的分页 API 接收所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54484149/