python - 如何在 Python 中循环 GET 请求以从数据帧中的分页 API 接收所有数据

标签 python pandas api pagination get

我需要使用 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 调用一次最多只能获取一页。我知道我需要循环它,但我不知道如何循环,因为我不知道有多少页。

最佳答案

  1. 该页面是预期的,因为在定义字典时,您在键上使用了单引号,而不是在值上使用了单引号,因此会出现错误。没有单引号或双引号 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/

    相关文章:

    python - 当使用 pandas 规范化 json 时,为什么到达嵌套元会给出 NaN ?

    java - 开源语言翻译 A​​PI - 适用于 Java 应用程序

    api - React Native/Expo : Fetch throws “Network request failed”

    Python删除美元金额中的逗号

    python - 来自时间戳的日期时间返回错误的年份

    python - Pandas :枚举索引中的重复项

    ruby - 通过 API v1.5 访问整个 netflix 目录

    python - 使用 matplotlib 的颜色循环作为颜色图

    python - 如何有效地计算两个字典的内积

    pandas - 如何将计数从一组范围转移(总结)到包含这些范围的范围?