如何在未知API最大页数时用Python requests获取全部数据
解决API分页无总页数/行数时获取全部数据的问题
当API不返回总页数或总行数时,你可以通过循环分页请求直到返回数据为空或不足单页容量的方式获取全部数据,具体实现如下:
核心思路
- 使用你已确认的最大可用
pageSize(即2000),从pageNumber=1开始逐页请求 - 每次请求后检查返回的数据量:若数据为空,或数据条数小于
pageSize,说明已获取到最后一页,终止循环 - 将每一页的数据合并到总列表中
修改后的完整代码
import requests headers = { 'accept': '*/*', 'Authorization': 'Bearer <generated_token_put_here>', 'Content-Type': 'application/json', } # 配置最大可用分页参数 max_page_size = 2000 current_page = 1 all_data = [] while True: # 构造分页请求体(用字典替代字符串,更易维护) payload = { "pageSize": max_page_size, "pageNumber": current_page } # 发送POST请求,统一使用指定CA证书 response = requests.post( '<api_endpoint_put_here>', headers=headers, verify='/etc/ssl/certs/ca-certificates.crt', json=payload # 自动序列化字典为JSON,无需手动转义 ) # 校验请求是否成功(失败直接抛出异常) response.raise_for_status() # 解析响应数据(如果API返回的是包含数据字段的对象,需改为response.json()["data"]) page_data = response.json() # 判断是否到达最后一页 if not page_data or len(page_data) < max_page_size: all_data.extend(page_data) break # 合并当前页数据,继续下一页 all_data.extend(page_data) current_page += 1 print(f"共获取到 {len(all_data)} 条数据")
关键细节说明
- 循环终止逻辑:多数分页API在请求超过实际总页数时会返回空数组;若最后一页数据不足
pageSize,也可判断为已完成全部数据拉取 - 请求体优化:用字典格式的
payload配合json参数传递,避免手动编写JSON字符串时的转义错误,同时让代码更易读 - 错误处理:
response.raise_for_status()会在请求返回4xx/5xx状态码时抛出异常,便于快速定位请求失败的问题 - CA证书配置:统一在
requests.post中指定verify参数,避免与headers中的配置冲突
内容的提问来源于stack exchange,提问作者swilson
相关产品推荐
相关产品推荐

