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

时间:2015-08-16 23:07:16

标签: python web-scraping urllib

我正在尝试下载2015年加拿大联邦选举的所有候选人的数据。有一个名为opennorth的服务,它有一个API,允许您通过向此URL发送请求来执行此操作:

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

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

  

要下载所有代表,请发送请求   https://represent.opennorth.ca/representatives/?limit=1000并跟随   元字段下的下一个链接,直到你到达终点。我们主持   GitHub上的shapefile和邮政编码索引。

这适用于"代表"数据,但我认为"候选人"是相同的。我不明白他们的意思"按照元字段下的下一个链接,直到你到达终点"。有人可以告诉我这个吗?

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

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")

1 个答案:

答案 0 :(得分:1)

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

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

您需要的链接是["meta"]["next"]

或者,您可以通过添加offset网址参数来构建该链接。