如何使用Python循环获取API返回的全部分页JSON数据?
如何循环获取API所有页面的数据?
可以通过以下步骤实现全量数据拉取:
- 初始化存储容器:创建一个空列表,用来收集所有页面返回的
records数据 - 获取总页数:先请求第一页数据,从响应里拿到
pages字段(总页数) - 循环请求所有页面:遍历从1到总页数的每一页,依次发送请求,解析数据并将
records追加到列表中 - 合并为DataFrame:所有数据收集完成后,将列表转换为Pandas DataFrame
完整代码示例
import requests import pandas as pd # 初始化空列表存储所有记录 all_records = [] url = "你的API地址" try: # 先请求第一页,获取总页数 first_response = requests.get(url, params={'page': 1}) first_response.raise_for_status() # 检查请求是否成功 first_data = first_response.json() total_pages = first_data['pages'] # 循环请求每一页 for page in range(1, total_pages + 1): print(f"正在获取第 {page}/{total_pages} 页数据") response = requests.get(url, params={'page': page}) response.raise_for_status() page_data = response.json() all_records.extend(page_data['records']) # 用extend避免嵌套列表 # 转换为DataFrame df = pd.DataFrame(all_records) print("所有数据获取完成,DataFrame形状:", df.shape) print(df.head()) except requests.exceptions.RequestException as e: print(f"请求出错:{e}")
关键细节说明
- 使用
response.raise_for_status():如果请求返回错误状态码(比如404、500),会直接抛出异常,方便排查问题 - 用
extend()而非append():append()会把每一页的records列表作为单个元素加入,而extend()是把列表里的每个元素单独加入,最终得到扁平的记录列表 - 异常捕获:处理网络请求中可能出现的错误,比如连接超时、API报错等
- 可选优化:如果API有限流,可在循环中加入
time.sleep(1)(需导入time模块),避免请求过于频繁被封禁
内容的提问来源于stack exchange,提问作者Alper
相关产品推荐
相关产品推荐

