You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

拉取多组分页数据时如何停留在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:06:03