Гайд: как работать с библиотеками для отправки HTTP-запросов в Python

Пост опубликован в блогах iXBT.com, его автор не имеет отношения к редакции iXBT.com
| Статья | ИИ, сервисы и приложения

Если ты ищешь как отправлять http-запросы в python, то ты попал туда, куда нужно. Сегодня мы рассмотрим 2 python библиотеки для работы с http запросами.

Библиотека requests

Очень популярная библиотека, большинство людей начинают своё знакомство с http запросами в python именно с этой библиотеки.

Для начала нам нужно установить библиотеку. Открываем консоль (в Windows - cmd, в Linux и Mac OS - терминал) и вводим команду

pip install requests

После этого создаём файл и импортируем библиотеку

import requests

Теперь мы будем обращаться к сайтам при помощи http запросов. Существует несколько методов http. Сегодня мы рассмотрим только get. Его следует использовать при получении данных. Для примера мы обратимся к сайту https://google.com/

response = requests.get("https://google.com")

При помощи этой библиотеки мы можем очень просто указывать параметры для ссылки в виде словаря

query = {
    "param": "data", # здесь могут быть любые параметры 
    "param2": "data"
}

response = requests.get("https://google.com/", params=query)

Мы обратились к сайту, но как узнать статус сайта? Легко

print(response.status_code)

Из данной записи мы сможем узнать статус код сайта. Например статус код 200 обычно указывает, что всё прошло успешно. Также мы можем узнать html код сайта, если есть получить json объект и получить ссылку, по которой мы обращались к сайту

# html код
print(response.text)
# json объект
# print(response.json())  В данной ситуации не работает, т.к. на сайте нет json
# получение ссылки
print(response.url)

Довольно-таки простая библиотека для новичка

Библиотека aiohttp

Сейчас мы познакомимся с другой мощной библиотекой aiohttp, она позволяет отправлять запросы, в отличие от requests, асинхронно. Сейчас объясню кратко, чем отличается синхронность от асинхронности.

Например, простой пример - человек готовит себе завтрак

Его последовательность действий:

Он готовит яичницу, ждёт её приготовления, затем, человек начинает кипятить чайник и ждёт до того момента, пока он не вскипит. И только после этого продолжает свой список дел. Согласитесь довольно-таки медленно, ведь пока человек ждёт, он ничего не делает. Это был пример синхронности

При асинхронности человек во время ожидания выполняет другие дела.

Также и в программировании, чтобы программа не простаивала во время ожидания, существует асинхронный код

Давайте установим библиотеку aiohttp

pip install aiohttp

После установки открываем python файл и импортируем библиотеку, также для работы с асинхронностью следует импортировать модуль asyncio

import aiohttp
import asyncio

Затем нам нужно открыть сессию и отправить метод get на сайт https://google.com/

# импорты
import aiohttp
import asyncio

# создаем асинхронную функцию
async def func():
    async with aiohttp.ClientSession() as session: # открытие сессии в aiohttp
        response = await session.get("https://google.com/") # отправка запроса

loop = asyncio.new_event_loop() # создаём новый асинхронный цикл
loop.create_task(func()) # добавляем в него нашу функцию 
loop.run_forever() # запускаем цикл

Да, тут много не понятного для новичка. Всем тем, кому непонятен данный код, советую разобраться как работает асинхронность в python.

Мы также можем отправить параметры ссылки

# импорты
import aiohttp
import asyncio

# создаем асинхронную функцию
async def func():
    async with aiohttp.ClientSession() as session: # открытие сессии в aiohttp 
        query = {
            "param": "data", 
            "param2": "data"
        } # параметры, тут можно указать любые
        response = await session.get("https://google.com/", params=query) # отправка запросов

loop = asyncio.new_event_loop() # создаём новый асинхронный цикл
loop.create_task(func()) # добавляем в него нашу функцию 
loop.run_forever() # запускаем цикл 

Теперь мы можем получить статус код, json, текст и ссылку

# импорты
import aiohttp
import asyncio

# создаем асинхронную функцию
async def func():
    async with aiohttp.ClientSession() as session: # открытие сессии в aiohttp 
        query = {
            "param": "data", 
            "param2": "data"
        } # параметры, тут можно указать любые
        response = await session.get("https://google.com/", params=query) # отправка запросов
        print(response.status) # получение статус кода
        print(response.url) # получение ссылки
        # print(await response.json()) В данной ситуации не работает, т.к. на сайте нет json
        print(await response.text()) # получение html

loop = asyncio.new_event_loop() # создаём новый асинхронный цикл
loop.create_task(func()) # добавляем в него нашу функцию 
loop.run_forever() # запускаем цикл 

Итог

Мы научились отправлять http-запросы на сайт при помощи 2 python библиотек: requests и aiohttp. Выбор библиотеки зависит от тебя и от ситуации. В некоторых ситуациях полезен requests, в некоторых aiohttp. Выбор за тобой))

Автор не входит в состав редакции iXBT.com (подробнее »)
Об авторе
Человек, который считает себя программистом

9 комментариев

s
Открываем консоль и вводим команду
что за «консоль», где открываем. На смартфоне, на планшете, на утюге? Автор, на кого рассчитан данный текст?
102958348473496338014@google
Как минимум на человека, который хоть немного разбирается в языках программирования.
4535348@vkontakte
процентов 20-30 новостей про машины, причем новостей для новостей.
S
Человек, который хоть немного разбирается, в том объеме, который в данной статье, разберется с этими либами с помощью штатной справки или stackoverflow за 5 минут.
GennDALF
Полагаю, статья рассчитана на тех новичков, которые изучали основы Python и уже представляют себе функции, менеджеры контекста, модель языка в целом. Но не лазили по пакетам и не имели дело с сетевыми запросами.
Если это так, то, конечно, сетевую часть стоит раскрыть подробнее. Особенно асинхронку.
Ссылки на документацию пакетов тоже обязательно должны быть.
102958348473496338014@google
Спасибо за комментарий)
GennDALF
И про выбор между синхронным и асинхронным подходами — хотя бы обозначить, куда копать, чтобы определиться с критериями выбора.
Я бы сам с удовольствием об этом почитал. Реальной практики в асинхронных проектах, например, у меня нет.

Добавить комментарий

Сейчас на главной

Новости

Публикации

Обзор планшета Blackview Mega 12: большой четкий 2,4К экран на 120 Гц, объемный звук и режим ноутбука

Blackview Mega 12 это крупный 12,2″ планшет с четким и плавным экраном, который идеально подходит для просмотра видео в высоком качестве, игр, рисования, а также работы с документами и...

Обзор стационарного блендера Felfri FF-CB-12 — практичный вариант для обычной кухни

Передо мной стационарный блендер Felfri FF-CB-12 в формате 3 в 1. Устройство объединяет функции блендера, измельчителя и кофемолки. В этом обзоре я подробно опишу комплект поставки, внешний вид и...

Обзор повербанка Ugreen PB552 на 25000 мАч. Два встроенных кабеля и быстрая зарядка мобильного телефона!

Современным пользователям нужен не просто повербанк, а мобильная электростанция, способная заряжать ноутбук. Ugreen PB552 — ответ на этот запрос: его мощность 165 Вт и ёмкость 25000 мАч...

Неужели никаких сюрпризов: каким будет «доступный» флагман Google Pixel 10a

В начале этого года компания Google по традиции должна представить «бюджетный» флагман Pixel 10a. Несмотря на то, что официальный анонс смартфона состоится минимум через месяц, будущий Пиксель уже...

Конец Линии? Строительство линейного небоскреба The Line в Neom заморожено

В истории человечества было множество грандиозных архитектурных проектов, начиная от Вавилонской башни (которая оказалось шумерским храм Этеменанки) до Великих пирамид в Египте. Но современность...