python循环以提取用于迭代URL的API数据

时间:2018-11-30 13:49:52

标签: python api loops iteration

我正在尝试建立一个for循环,以提取大约60万个邮政编码的民选代表数据。基本网址保持不变,唯一更改的部分是邮政编码。

理想情况下,我想创建一个所有邮政编码的列表,然后使用request.get为列表中的所有邮政编码提取数据。我在下面提出了此代码,但它只是提取列表中最后一个邮政编码的数据。我不太确定为什么会这样,并且是python初学者-因此,我们将不胜感激!


#loop test 
postcodes = ['P0L1B0','P5A3P1', 'P5A3P2', 'P5A3P3']

for i in range(len(postcodes)):
   rr = requests.get('https://represent.opennorth.ca/postcodes/{}'.format(postcodes[i]))

data1=json.loads(rr.text)

data1

3 个答案:

答案 0 :(得分:1)

您每次迭代都覆盖data1变量,这就是为什么最后只剩下最后一个变量,所以需要以不同的方式存储它的原因。

示例:

postcodes =['P0L1B0','P5A3P1', 'P5A3P2', 'P5A3P3']
results = []

for postcode in postcodes:
    res = requests.get('https://represent.opennorth.ca/postcodes/{}'.format(postcode))

    if res.status_code == 200:
        results.append(res.json())
    else: 
        print("Request to {} failed".format(postcode))

答案 1 :(得分:1)

您的代码无效,因为它会覆盖data1。

尝试一下:

#loop test 
responses = list() # stores responses for postal codes
postcodes = ['P0L1B0','P5A3P1', 'P5A3P2', 'P5A3P3']

for postcode in postcodes:
   rr = requests.get('https://represent.opennorth.ca/postcodes/{}'.format(postcode))
   data=json.loads(rr.text)
   responses.append(data)

您的回复现在保存在回复列表中。

提示:
您可以在不使用索引的情况下遍历列表。

答案 2 :(得分:0)

您正在查看最后的答复。

#loop test 
postcodes = ['P0L1B0','P5A3P1', 'P5A3P2', 'P5A3P3']

api_data = dict()

for i in postcodes:
   rr = requests.get('https://represent.opennorth.ca/postcodes/{}'.format(i))

   data = json.loads(rr.text)
   api_data.update({i: data})   
   # or print(data)

print(api_data)

在这里,我已将所有响应添加到字典中,键为邮政编码,值为响应。