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

Python如何使用while循环调用REST API直至无更多结果返回

实现方案

首先修正原有代码的两处核心逻辑错误:

  1. PARAMS固定定义在循环外,offsetValue更新后不会同步到请求参数,每次请求都只会拉取第一页数据
  2. 偏移量每次仅+1,会导致大量重复数据拉取,正确逻辑应为每次偏移量叠加单页拉取数量limit

修改后完整代码

import requests
import json
from time import sleep

url = "https://someurl"
offset_value = 0
limit = 50
headers = {
    "Accept": "application/json"
}

while True:
    # 每次循环动态组装请求参数
    params = {'limit': limit, 'offset': offset_value}
    response = requests.get(
        url,
        headers=headers,
        params=params
    )
    # 校验请求是否成功,状态码非200会直接抛出异常
    response.raise_for_status()
    resp_json = response.json()
    
    # 此处需替换为实际API返回中结果列表对应的字段名,常见取值如data、items、list等
    result_list = resp_json.get("results", [])
    
    # 结果为空时终止循环
    if not result_list:
        break
    
    # 用with上下文管理器自动处理文件关闭,避免资源泄漏
    with open("testfile.txt", "a", encoding="utf-8") as testfile:
        testfile.write(json.dumps(resp_json, sort_keys=True, indent=4, separators=(",", ": ")))
    
    # 偏移量叠加单页数量,拉取下一页
    offset_value += limit
    sleep(1)

核心逻辑说明

  • 采用无限循环触发分页请求,直到满足终止条件主动退出,无需预先知道总数据量
  • 每次请求前动态组装参数,确保offset参数和当前偏移量一致
  • 拿到响应后先校验HTTP状态码,请求异常会直接抛出错误便于排查
  • 取出返回的结果列表,若列表为空代表没有更多数据,直接终止循环
  • 可根据需要新增优化逻辑:若返回的结果列表长度小于limit值,说明已经到最后一页,可直接终止循环,避免多发起一次无效请求

内容的提问来源于stack exchange,提问作者Artemis J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 01:06:07