如何运行 while 循环来运行 REST API 调用,直到 Python 中不再返回结果

问题描述

我正在编写一个简短的 Python 程序来使用 Rest API 调用请求一个 JSON 文件。 API 将我限制为相对较小的结果集(50 个左右),我需要检索数千个结果集。我已经实现了一个 while 循环来实现这一点,它运行得相当好,但我无法弄清楚“继续 while 循环”的逻辑,直到没有更多的结果可以检索。现在我已经实现了一个硬数值,但想用一个条件替换它,如果没有更多结果返回,它会停止循环。 'offset' 字段是 API 强制您使用的参数,用于指定您想要的 50 组结果。我的逻辑看起来像...

import requests
import json
from time import sleep

url = "https://someurl"
offsetValue = 0

ParaMS = {'limit':50,'offset':offsetValue}



headers = {
   "Accept": "application/json"
}

while offsetValue <= 1000:
   response = requests.request(
      "GET",url,headers=headers,params = ParaMS
   )
   testfile =  open("testfile.txt","a")
   testfile.write(json.dumps(json.loads(response.text),sort_keys=True,indent=4,separators=(",",": ")))
   testfile.close()
   offsetValue = offsetValue + 1
   sleep(1)

所以我想将控制while循环的条件从固定数字更改为检查getRequest的结果集是否为空。希望这是有道理的。

解决方法

您的循环可以是 while true。每次获取后,将有效负载转换为 dict。如果结果数为 0,则 break

根据 API 的工作方式,可能会有其他信号表明没有更多内容可获取,例如一些 HTTP 错误,不一定是结果计数 - 您必须为此发现 API 的逻辑。