Я пытаюсь настроить цикл for для получения данных избранных представителей примерно для 600 000 почтовых индексов. Базовый URL-адрес остается прежним, и изменяется только его часть - почтовый индекс.
В идеале я хотел бы создать список всех почтовых индексов, а затем использовать 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






Вы перезаписываете переменную 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))
вы просто просматриваете последний ответ.
#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)
здесь я добавил весь ответ на dict с ключом в качестве почтового индекса и значением в качестве ответа.
Благодаря тонну! Думаю, просто нужен api_data.update ()?
api_data.update() означает, что вы помещаете пару ключ-значение в словарь api_data, это базовая операция словарей, запустите мой код для лучшего понимания
Он имел в виду опечатку, этот код не запускается, так как вы используете api_data, а затем api_dict.
Ваш код не работает, потому что он перезаписывает 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)
Ваши ответы теперь сохранены в списке ответов.
Чаевые:
Вы можете перебирать список без использования индекса.
СПАСИБО!!! Конечно, мне не нужен индекс. Не могу поверить, что забыл добавить результаты.
Этот ответ не содержит проверки кода состояния, которая может вызвать у вас приятную головную боль, если через некоторое время она выйдет из строя и ни один из ваших ответов не будет сохранен. Если вы попытаетесь установить на json.loads то, что не является json, на JSONDecodeError это не удастся. Также, если этот набор данных ОГРОМНЫЙ, не используйте списки, а сохраните его в файле локально, по почтовому индексу, а затем объедините его.
Потому что на каждой итерации вы переопределяете значение data1. Вам нужно где-то сохранить значение data1 (например, в списках).