问题描述
我正在编写一个简短的 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 的逻辑。