如何从此网络服务下载多页数据?

How to download multiple pages of data from this web service?

我正在尝试下载 2015 年加拿大联邦选举的所有选举候选人的数据。有一个名为 opennorth 的服务有一个 API 允许你通过向这个 url:

发送请求来做到这一点

https://represent.opennorth.ca/candidates/?limit=1000

1000 个候选人是您在单个请求中所允许的限制,但肯定还有更多。我想知道如何获得下一页结果。来自他们自己的文档:

To download all representatives, send a request to https://represent.opennorth.ca/representatives/?limit=1000 and follow the next link under the meta field until you reach the end. We host the shapefiles and postal code concordances on GitHub.

这是针对 "representatives" 数据的,但我认为 "candidates" 也是如此。我不明白 "follow the next link under the meta field until you reach the end" 是什么意思。有人可以启发我吗?

到目前为止,这是我的脚本:

import urllib

with urllib.request.urlopen(r"https://represent.opennorth.ca/candidates/house-of-commons/?limit=1000") as url:
    with open(r"F:\electoral_map\candidates_python\candidates.js", "wb+") as f:
        f.write(url.read())
print("all done")

在返回的 JSON 对象中,有一个名为 meta 的对象。

..."meta": {"next": "/representatives/?limit=1000&offset=1000",
            "total_count": 2140,
            "previous": null,
            "limit": 1000,
            "offset": 0}}

你需要的 link 是 ["meta"]["next"].

或者,您可以通过添加 offset URL 参数来构建 link。