Цикл Python через API и добавить несколько объектов в виде кортежей в список - PullRequest
0 голосов
/ 06 июля 2019

Я тоже пытаюсь пройтись по всем страницам API, получить несколько объектов json, сохранить их как кортежи в списке и вернуть окончательный список

Это прекрасно работает только с 1 объектом, но я не могу заставить его работать, как только я начинаю добавлять несколько. Я пробовал различные твики и менял их на циклы while, но, похоже, не смог заставить работать

def star_wars_characters(url):
    all_names1 = []
    response1 = requests.get(url)
    data1 = response1.json()

    for x in data1['results']:
        all_names1.append(x['name'])


    while data1['next'] is not None:
        response1 = requests.get(data1['next'])
        data1 = response1.json()

        for x in data1['results']:
            all_names1.append(x['name'])

    return all_names1


print(star_wars_characters("https://swapi.co/api/people/?page=1"))

Я пытаюсь получить вывод, как показано ниже, но для всех страниц. Это всего лишь результаты для первой страницы, которую мне удалось вернуть, изменив цикл на while, но я не смог получить оставшиеся страницы данных:

[('Luke Skywalker', '77'), ('C-3PO', '75'), ('R2-D2', '32'), ('Darth Vader', '136'), ('Leia Organa', '49'), ('Owen Lars', '120'), ('Beru Whitesun lars', '75'), ('R5-D4', '32'), ('Biggs Darklighter', '84'), ('Obi-Wan Kenobi', '77')]

1 Ответ

2 голосов
/ 06 июля 2019
import requests

def star_wars_characters(url):
    return_data = []

    response = requests.get(url)
    data = response.json()

    while True:    
        for result in data['results']:
            return_data.append((result['name'], result['mass']))

        if data['next'] is None:
            break

        response = requests.get(data['next'])
        data = response.json()

    return return_data

print(star_wars_characters("https://swapi.co/api/people/?page=1"))
...