0

我使用 Guardian News api 来获取数据。然后它的文档说,结果作为分页列表返回,默认情况下,每页包含 10 个条目。我得到这样的输出JSON。监护人文件可以在这里找到

{
    "response": {
        "status": "ok",
        "userTier": "developer",
        "total": 8174,
        "startIndex": 1,
        "pageSize": 10,
        "currentPage": 1,
        "pages": 818,
        "orderBy": "relevance",
        "results": []
}

我想收集 10 个实体的所有数据(例如总共 8174 个)实例。有没有办法获取所有数据?

4

2 回答 2

1

我找到了答案。默认监护人每页获取 10 个条目。我们可以使用 API 中的参数覆盖默认值page-size并提供所需的数据计数。

https://content.guardianapis.com/search?q={query}&page-size={data count}
于 2020-04-07T04:26:50.333 回答
0

您的解决方案并非在所有情况下都有效,因为通常对 page-size 参数有限制。Guardian API 目前是 200。

如果您需要的项目多于一次调用 API 所能获得的,只需使用明确的循环(如果您知道需要多少页)或开放式 while 循环(如果您想获取所有内容)迭代页面,例如

current_page = 1
total_pages = 1
while current_page <= total_pages:
   try:
      r = requests.get(url, params)
      r.raise_for_status()
   except:
      SystemExit(err)
   current_page += 1
   total_pages = r.json()['response']['pages']

ps 如果出现故障,添加一条退出while循环的方法总是好的,你不想永远用请求淹没api!

于 2021-09-21T11:50:38.113 回答