Python如何使用while循环调用REST API直至无更多结果返回
实现方案
首先修正原有代码的两处核心逻辑错误:
- PARAMS固定定义在循环外,offsetValue更新后不会同步到请求参数,每次请求都只会拉取第一页数据
- 偏移量每次仅+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
相关产品推荐
相关产品推荐

