拉取多组分页数据时如何停留在for循环当前迭代处理完再进下一轮
实现方案
核心逻辑
- 把分页逻辑封装在每个分组的处理流程内部,每个分组独立维护自己的分页偏移量,避免不同分组的分页参数混淆
- 第一次请求拿到当前分组的总记录数后,直接在当前分组的处理循环内用while控制分页,直到该分组所有数据拉取完成,再进入下一个分组的处理
修正后完整代码
import requests import json def getOTCdata(weekStartDate): PAGE_SIZE = 100 # 单页最多拉取条数,和接口限制对齐 groups = ["G1", "G2", "G3"] url = 'myURL' # 外层遍历每个分组 for group in groups: start = 0 # 每个分组的偏移量单独初始化 record_total = None # 初始不知道总条数 while True: # 构造请求参数,新增分页参数 params = { "start": start, "limit": PAGE_SIZE, "compareFilters": [ {"compareType": "equal", "fieldName": "group", "fieldValue": group} ] } # 发起请求,用json参数自动序列化+设置正确请求头 resp = requests.post(url, json=params) resp.raise_for_status() # 请求失败直接抛出异常,可根据需要加重试逻辑 # 处理当前页数据(你原有数据下载/存储逻辑放这里) # process_data(resp.json()) # 第一次请求时获取当前分组总记录数 if record_total is None: record_total = int(resp.headers['Records']) # 计算下一次偏移量,判断是否还有下一页 start += PAGE_SIZE if start >= record_total: break # 该分组所有数据拉完,退出循环进入下一个分组
逻辑说明
- 以G1组150条记录为例:第一次请求start=0,拉取100条,拿到总条数150,更新start为100,100<150,进入下一次循环;第二次请求start=100,拉取剩余50条,更新start为200,200>=150,退出循环,开始处理G2组,完全符合需求
- 原有代码的问题修复:
- 修正了变量名错误(
for tier in tier、group变量未定义等语法问题) - 分页参数单独放在每个分组的循环内初始化,不会出现跨分组的参数污染
- 移除了不合理的大records默认值,用实际接口限制的单页条数100作为分页步长
- 修正了变量名错误(
- 可优化点:可以在请求逻辑外层增加重试机制,处理接口超时、限流等异常情况,提升采集稳定性
内容的提问来源于stack exchange,提问作者acbcccdc
相关产品推荐
相关产品推荐

