цикл Python для получения данных API для итерации URL - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь настроить цикл 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

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

вы просто просматриваете последний ответ.

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

здесь я добавил все ответы на диктовку, указав ключ в качестве почтового индекса и значение в качестве ответа.

0 голосов
/ 30 ноября 2018

Ваш код не работает, потому что он перезаписывает данные 1.

Попробуйте:

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

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

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

0 голосов
/ 30 ноября 2018

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