HTTP-запросы и обработка JSON в Python: API Google Directions
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для выполнения HTTP-запросов и обработки JSON в Python используйте модуль requests
:
import requests
response = requests.get('https://api.example.com/end-point')
data = response.json()
Замените 'https://api.example.com/end-point'
на необходимый API endpoint. Прежде чем приступить к обработке данных, проверьте, был ли запрос успешным.
Расширенное руководство
Осуществление HTTP-запросов и работа с форматом JSON – фундаментальные навыки разработчиков на Python, облегчаемые при помощи библиотеки requests
.
Составление продуктивных HTTP-запросов
Для более продвинутых запросов передавайте параметры в requests.get()
используя словарь, чтобы избежать конкатенации строк:
params = {'origin': 'Нарния', 'destination': 'Хогвартс', 'waypoints': 'Средиземье|Мордор', 'sensor': 'false'}
response = requests.get('https://maps.googleapis.com/maps/api/directions/json', params=params)
Совет: Значение waypoints
должно быть указано в виде одной строки, например, 'Средиземье|Мордор'.
Тщательное извлечение данных из JSON
После получения ответа, преобразуйте JSON с помощью метода .json()
и проверьте код ответа:
data = response.json()
if response.status_code == 200:
from pprint import pprint
pprint(data) # Выведем данные структурированно для удобства
else:
print("Ошибка HTTP-запроса:", response.status_code)
Обработка вложенных структур JSON
Обработка вложенных структур в JSON требует внимательного подхода. На Python это выполнимо:
for route in data['routes']:
for leg in route['legs']:
for step in leg['steps']:
print(step['html_instructions'])
Используйте циклы для перемещения по структуре данных.
Важные моменты, которые надо запомнить
- Всегда проверяйте статус ответа.
- Применяйте метод
.json()
, а при необходимости —json.loads(response.content)
. - Не ограничивайтесь в использовании параметров запроса: чем больше их, тем лучше.
Визуализация
Как бы это выглядело в форме анекдота, если бы HTTP-запросы и обработка JSON были людьми:
# HTTP-запрос входит в бар и заказывает:
"Пожалуйста, дайте мне ваш URL!"
# JSON входит в тот же бар и просит:
"Расшифруйте меня, как один из ваших сложных наборов данных."
Продвинутые возможности библиотеки requests
Помимо базового функционала, библиотека requests
предлагает и расширенные возможности:
- Сессии: Используйте
requests.Session()
для увеличения производительности запросов. - Заголовки: Манипулируйте заголовками с различными целями, включая аутентификацию.
- Таймауты: Не позволяйте вашим запросам "висеть" в вечном ожидании.
Руководство по устранению ошибок
- Коды ошибок: Знание HTTP-статусов может сэкономить вам время.
- Исключения: Защищайте свой код с помощью конструкций
try-except
. - Отладка: Привыкайте к логированию — это может быть чрезвычайно полезным.
Повышение производительности
Если вы стремитесь к оптимизации работы с запросами:
- Пул соединений: Применяйте объекты
Session
. - Асинхронные запросы: Рассмотрите возможность использования библиотеки
aiohttp
. - Потоковая передача: Активируйте параметр
stream
для работы с большими данными.
Полезные материалы
- Requests: HTTP для человека™ — документация Requests 2.31.0 — основная документация по библиотеке Requests Python.
- json — кодировщик и декодировщик JSON — документация Python 3.12.2 — основная информация по работе с json в Python.
- Быстрый старт — документация Requests 2.31.0 — учебное руководство для начинающих работу с HTTP-запросами.
- Библиотека Requests в Python (Руководство) – Real Python — детальное руководство по использованию библиотеки Requests и JSON.
- Методы HTTP-запросов – HTTP | MDN — разъяснение различных HTTP-методов.
- HTTP-заголовки – HTTP | MDN — информация о HTTP-заголовках, необходимая для корректного выполнения запросов.