【问题标题】:Using "Next Page" in while loop在while循环中使用“下一页”
【发布时间】:2020-12-22 19:22:02
【问题描述】:

我正在从 API 端点检索数据,该端点一次最多只能检索 100 个数据点。响应中有一个“下一页”字段,我可以使用它来检索接下来的 100 个数据点等等(总共大约 70,000 个),方法是将下一页 URL 插入 GET 请求。如何利用 for 循环或 while 循环通过自动将“下一页”URL 插入到 get 请求中来检索端点中的所有可用数据?

这是我正在使用的代码。问题是当我执行 While 循环时,每次都会得到相同的响应,因为它在第一个响应实例上运行。我想不出如何调整这个的解决方案。

response = requests.get(url + '/api/named_users?limit=100', headers=headers)
users = []
resp_json = response.json()
users.append(resp_json)

while resp_json.get('next_page') != '':
    response = s.get(resp_json.get('next_page'), headers = headers)
    resp_json = response.json()
    users.append(resp_json)

总结一下:我想在每个响应中获取“下一页”URL,以获取接下来的 100 个数据点并将其附加到列表中,直到我获取所有数据为止。

【问题讨论】:

    标签: python for-loop while-loop get iteration


    【解决方案1】:

    您可以使用递归函数来做到这一点。 例如这样的:

    response = requests.get(url + '/api/named_users?limit=100', headers=headers)
    users = []
    resp_json = response.json()
    users.append(resp_json)
    users = next_page(resp_json.get('next_page'), users)
    
    def next_page(url, users):
        if url != '':
            response = s.get(url, headers=headers)
            resp_json = response.json()
            users.append(resp_json)
            if resp_json.get('next_page') != '':
                return next_page(resp_json.get('next_page'), users)
    
            return users
    
    

    但一般来说,API 会返回项目总数和每个请求的项目数。因此,您可以轻松地对所有项目进行分页和循环。 这是一些伪代码:

    for i in range(items_returned__per_request, total_number_of_items/items_returned__per_request):
        response = s.get(resp_json.get('next_page'), headers=headers)
        resp_json = response.json()
        users.append(resp_json)
    

    【讨论】:

      猜你喜欢
      • 2017-04-22
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 2020-09-08
      • 2018-12-10
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多