获取守护者所有文章 API

Get all articles Guardian API

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

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

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

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

https://content.guardianapis.com/search?q={query}&page-size={data count}

您的解决方案并非在所有情况下都适用,因为页面大小参数通常有限制。对于守护者 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']

p.s。如果某些事情失败了,添加一个退出 while 循环的方法总是好的,你不想永远用请求淹没 api!