如何循环Python中的GET请求来接收的数据帧从一个分页API的所有数据

时间:2019-02-01 17:14:20

标签: python pandas api pagination get

我需要从与Python的API把所有的数据,但每个页面只包含100个结果,我不能确定如何使用循环返回每一页,所以我可以把所有的数据在一个单一的数据帧。 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网址,因此“ page = 1:160”和“ page = 1-160”却只能返回第一页。

然后我尝试添加页参数作为一个单独的语句,它返回一个名称错误;

IN:

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

OUT:

NameError name 'page' is not defined

接下来,我试图运行相同的代码,但与所有者指定的API格式开始,但收到了非常类似的错误消息;

IN:

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'])

OUT:

KeyError 'last_page'

我有望获得包含来自API的所有结果的数据帧,即使他们分页。但是,我只能在同一时间获得最大的每API调用一个页面。我知道我需要循环它,我不知道如何,因为我不知道有多少网页有。

1 个答案:

答案 0 :(得分:0)

  1. 该页面是预期的,因为在定义dict时,您已在键上而不是在值上使用了单引号,因此会出现错误。没有单引号或双引号,python会将其视为未定义的变量

没有页面错误的正确代码:

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
  1. 接收到的json中不存在r_session密钥。您可以使用下面的简单代码来检查json中的顶级密钥。

r_sessions = requests.get("https://www.api.url.com/sessions?apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31").json() for i in r_sessions: print(i)