@din44rx

Как сделать постраничный переход (итератор) по страницам API?

Есть API, которое выдает только сто результатов на одну страницу. Пытаюсь сделать цикл while, чтобы он проходил по всем страницам и забирал со всех страниц результаты, но не получается. Буду благодарен, если поможете разобраться.

Код:

params = dict(
    order_by='salary_desc',
    text=keyword,
    area=area,
    period=30, # days
    per_page=100,
    page = 0,
    no_magic='false',  # disable magic
    search_field='name'  # available: name, description, company_name
)
response = requests.get(
    BASE_URL + '/vacancies',
    headers={'User-Agent': generate_user_agent()},
    params=params,
)
response

items = response.json()['items']
vacancies = []
for item in items:
    vacancies.append(dict(
        id=item['id'],
        name=item['name'],
        salary_from=item['salary']['from'] if item['salary'] else None,
        salary_to=item['salary']['to'] if item['salary'] else None,
        currency = item['salary']['currency'] if item['salary'] else None,
        created=item['published_at'],
        company=item['employer']['name'],
        area = item['area']['name'],
        url=item['alternate_url']
    ))


Делаю цикл по словарю, если есть результат в словаре добавляю итератором +1 в параметр page :

while vacancies == True:
  params['page'] += 1


Результат в словаре params['page'] = остается ноль (страницы в API начинаются с нуля).

При вызове params после запуска цикла результат:
{'area': 1,
'no_magic': 'false',
'order_by': 'salary_desc',
'page': 0,
'per_page': 100,
'period': 30,
'search_field': 'name',
'text': '"python"'}

Возможно неправильно делаю сам цикл, отталкиваюсь от логики, что пока есть результат в словаре должен выполняться цикл.
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Wispik
ну так запрос к апи тоже надо в цикле делать, а не просто page увеличивать
Ответ написан
Комментировать
@gromyko21
Что-то в этом духе. Этот пример будет печатать каждую вакансию, пока они не закончатся в списке
for i in vacancies:
   print(i)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы