我正在尝试建立一个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
答案 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)
在这里,我已将所有响应添加到字典中,键为邮政编码,值为响应。