Загрузка данных с многостраничного сайта методом запросов в Python - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть эта документация API веб-сайта http://json-homework.task-sss.krasilnikov.spb.ru/docs/9f66a575a6cfaaf7e43177317461d057 (которая, к сожалению, только на русском языке, но я постараюсь объяснить), и я должен импортировать данные о членах группы из там, но проблема в том, что параметр page возвращает только 5 элементов, а когда вы увеличиваете номер страницы, он возвращает только следующие 5 элементов, не добавляя их к предыдущим пяти элементам. Вот мой код:

import pandas as pd
import requests as rq
import json
from pandas.io.json import json_normalize
url='http://json-homework.task-sss.krasilnikov.spb.ru/api/groups/getmembers?api_key=9f66a575a6cfaaf7e43177317461d057&group_id=4508123&page=1'
data=rq.get(url)
data1=json.loads(data.text)
data1=json_normalize(json.loads(data.text)["response"])
data1

и вот как выглядит мой вывод: my output

Вводя все большие и большие числа, я также узнал, что последняя часть данных существует на 41 странице, т.е. мне нужно получить данные от 1 до 41 страницы. Как я могу включить все страницы в мой код? Может быть, это возможно с каким-то l oop или чем-то подобным, я не знаю ...

1 Ответ

1 голос
/ 29 февраля 2020

В соответствии с документацией API, нет параметра для указания пользователей для выборки на одной странице, поэтому вам придется получать их по 5 одновременно, а поскольку имеется 41 страница, вы можете просто l oop через urls.

import requests as rq
import json

all_users = []
for page in range(1,42):
    url=f'http://json-homework.task-sss.krasilnikov.spb.ru/api/groups/getmembers?api_key=9f66a575a6cfaaf7e43177317461d057&group_id=4508123&page={page}'
    data=rq.get(url)
    all_users.append(json.loads(data.text)["response"])

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

...