Цикл python для извлечения данных API для повторения URL-адресов

Я пытаюсь настроить цикл 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. Вам нужно где-то сохранить значение data1 (например, в списках).

cengineer 30.11.2018 14:53
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
9 418
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы перезаписываете переменную 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 ()?

M.Ai 30.11.2018 15:06
api_data.update() означает, что вы помещаете пару ключ-значение в словарь api_data, это базовая операция словарей, запустите мой код для лучшего понимания
P.hunter 30.11.2018 15:14

Он имел в виду опечатку, этот код не запускается, так как вы используете api_data, а затем api_dict.

Josef Korbel 30.11.2018 15:32
Ответ принят как подходящий

Ваш код не работает, потому что он перезаписывает 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)

Ваши ответы теперь сохранены в списке ответов.

Чаевые:
Вы можете перебирать список без использования индекса.

СПАСИБО!!! Конечно, мне не нужен индекс. Не могу поверить, что забыл добавить результаты.

M.Ai 30.11.2018 15:05

Этот ответ не содержит проверки кода состояния, которая может вызвать у вас приятную головную боль, если через некоторое время она выйдет из строя и ни один из ваших ответов не будет сохранен. Если вы попытаетесь установить на json.loads то, что не является json, на JSONDecodeError это не удастся. Также, если этот набор данных ОГРОМНЫЙ, не используйте списки, а сохраните его в файле локально, по почтовому индексу, а затем объедините его.

Josef Korbel 30.11.2018 15:26

Другие вопросы по теме