API分页调用循环优化咨询:解决无限循环与JSON解码错误
API分页数据遍历的正确实现方式
原代码存在的问题
- 遗漏了初始请求返回的第一页数据
- 未处理API请求失败场景(如返回非JSON响应),触发
JSONDecodeError - 循环终止条件不严谨,若
Next字段异常可能导致无限循环 - 分页请求未复用认证头,可能因权限问题返回无效响应
修正后的实现代码
import requests data = [] # 替换为你的初始请求信息 initial_url = "你的API初始URL" request_headers = headersAPI request_params = params # 处理第一页数据 try: response = requests.get(initial_url, headers=request_headers, params=request_params, verify=True) response.raise_for_status() # 检查HTTP请求是否成功 api_response = response.json() # 加入第一页数据 data.extend(api_response['Data']['Rows']) # 获取下一页URL,用get避免字段缺失报错 next_page_url = api_response['Data']['Paging'].get('Next') # 分页循环遍历 while next_page_url: response = requests.get(next_page_url, headers=request_headers, verify=True) response.raise_for_status() api_response = response.json() # 追加当前页数据 if 'Rows' in api_response['Data']: data.extend(api_response['Data']['Rows']) # 更新下一页URL,无则返回None终止循环 next_page_url = api_response['Data']['Paging'].get('Next') except requests.exceptions.HTTPError as err: print(f"HTTP请求错误: {err}") except ValueError as err: print(f"JSON解析失败: {err}") except KeyError as err: print(f"响应结构缺失字段: {err}") print(f"累计获取数据条数: {len(data)}")
关键改进说明
- 捕获初始页数据:确保第一页的
Rows不会被遗漏 - 异常兜底处理:覆盖HTTP错误、JSON解析失败、字段缺失等场景,避免程序崩溃或无限循环
- 安全的字段访问:使用
dict.get()获取Next字段,即使响应结构变化也不会直接抛出KeyError - 复用请求头:所有请求携带认证信息,保证分页请求的权限有效性
- 明确终止逻辑:当
next_page_url为None或空值时,自动退出循环
内容的提问来源于stack exchange,提问作者Deniss
相关产品推荐
相关产品推荐

