Основы REST API для сбора данных
HTTP GET/POST, заголовки, аутентификация (ключ API, Bearer) и разбор JSON с помощью requests.
«Основы REST API для сбора данных» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Зачем нужны интерфейсы API для ИИ
Качество моделей ограничено качеством их данных. Веб-интерфейсы позволяют получать свежие структурированные данные по запросу — о погоде, ценах, публикациях в социальных сетях и из общедоступных наборов данных — вместо использования одного статического файла.
В этом курсе используются Python и популярная библиотека requests для получения и сохранения этих данных.
Что такое REST-интерфейс
REST-интерфейс предоставляет доступ к ресурсам через HTTP. Вы отправляете запрос по URL (конечной точке) и получаете данные, обычно в формате JSON.
Основные методы HTTP:
GET— чтение данныхPOST— создание данныхPUT/PATCH— обновлениеDELETE— удаление
Для сбора данных чаще всего используется GET.
Первый запрос GET
requests.get(url) отправляет запрос GET и возвращает объект ответа. Ответ содержит код состояния, заголовки и тело.
import requests
resp = requests.get("https://api.example.com/users")
print(resp.status_code) # 200
print(resp.text[:200]) # raw body as a stringПроверка response.status_code
Код состояния сообщает, успешно ли выполнен запрос:
200OK301/302перенаправление400некорректный запрос401/403проблема аутентификации404не найдено429превышен лимит запросов500ошибка сервера
resp = requests.get(url)
if resp.status_code == 200:
print("Success")
else:
print("Failed:", resp.status_code)Разбор JSON с помощью response.json()
Большинство интерфейсов возвращают JSON. response.json() автоматически разбирает тело ответа в словари и списки Python.
Не разбирайте JSON вручную — .json() выполняет это сам и выдаёт понятную ошибку, если тело не содержит корректный JSON.
resp = requests.get("https://api.example.com/users/1")
data = resp.json()
print(data["name"])
print(data["email"])Передача параметров запроса с помощью params
Фильтруйте запросы и настраивайте их с помощью параметров запроса. Передайте словарь в params, и requests самостоятельно сформирует URL, обработав кодирование.
В URL пример преобразуется в ?city=London&units=metric.
params = {"city": "London", "units": "metric"}
resp = requests.get("https://api.example.com/weather", params=params)
print(resp.url)
print(resp.json())Передача заголовков
Заголовки передают метаданные, например тип содержимого, агент пользователя или ключ/токен интерфейса API. Передайте их в виде словаря в headers.
Для доступа многие интерфейсы требуют заголовок Authorization.
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"User-Agent": "my-data-collector/1.0",
}
resp = requests.get("https://api.example.com/data", headers=headers)
print(resp.json())raise_for_status() для надёжного кода
Вместо ручной проверки кодов вызовите resp.raise_for_status(). Для любого ответа 4xx или 5xx он выдаёт HTTPError, поэтому о сбоях становится известно сразу.
Оберните вызов в try/except, чтобы корректно обрабатывать ошибки.
import requests
try:
resp = requests.get(url, timeout=10)
resp.raise_for_status()
data = resp.json()
except requests.HTTPError as e:
print("HTTP error:", e)
except requests.RequestException as e:
print("Network error:", e)Всегда задавайте timeout
Без timeout зависший сервер может навсегда остановить выполнение скрипта. Всегда задавайте это значение (в секундах).
В циклах сбора данных, обращающихся к тысячам конечных точек, отсутствие timeout часто приводит к зависанию заданий.
resp = requests.get(url, timeout=10) # give up after 10 secondsПовторное использование соединений с помощью Session
requests.Session повторно использует базовое TCP-соединение между запросами и позволяет один раз задать заголовки. При большом количестве вызовов к одному узлу это значительно быстрее.
import requests
session = requests.Session()
session.headers.update({"Authorization": "Bearer YOUR_TOKEN"})
for uid in [1, 2, 3]:
resp = session.get(f"https://api.example.com/users/{uid}")
print(resp.json()["name"])
session.close()Вспомогательная функция для чистого получения данных
Оформите этот шаблон в виде повторно используемой функции: создайте сеанс, задайте timeout, вызывайте исключение при ошибках и возвращайте разобранный JSON.
В следующих уроках Вы расширите эту вспомогательную функцию для постраничной загрузки и хранения данных.
def fetch_json(session, url, params=None):
resp = session.get(url, params=params, timeout=10)
resp.raise_for_status()
return resp.json()Быстрая проверка: надёжные запросы
Вы хотите, чтобы код автоматически выдавал исключение при ответе 404 или 500.
Итоги: основы REST-интерфейсов
Теперь Вы умеете получать данные через HTTP:
requests.get(url, params=..., headers=...)для отправки запросовresponse.status_codeиraise_for_status()для обнаружения сбоевresponse.json()для разбора тела ответаtimeoutдля предотвращения зависанийrequests.Sessionдля повторного использования соединений и заголовков
Далее: сбор наборов данных, охватывающих множество страниц.
Часто задаваемые вопросы
Урок «Основы REST API для сбора данных» бесплатный?
Да — полный текст урока «Основы REST API для сбора данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Основы REST API для сбора данных»?
HTTP GET/POST, заголовки, аутентификация (ключ API, Bearer) и разбор JSON с помощью requests. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Основы REST API для сбора данных»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы REST API для сбора данных
- Постраничная загрузка и сбор больших наборов данных
- Эффективное хранение собранных данных
- Работа с общедоступными API данных