Гайд: как работать с библиотеками для отправки 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
И про выбор между синхронным и асинхронным подходами — хотя бы обозначить, куда копать, чтобы определиться с критериями выбора.
Я бы сам с удовольствием об этом почитал. Реальной практики в асинхронных проектах, например, у меня нет.

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

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

Новости

Публикации

«Иван-Виллис»: история редкого советского внедорожника ГАЗ-67Б

ГАЗ-67Б — советский автомобиль времен ВОВ, внедорожник, который оставил заметный след в истории отечественного автопрома, став своего рода прадедушкой отечественных проходимых авто (с...

Как за 20 лет мы прошли путь от покупки рингтонов до постоянного беззвучного режима

В начале 2000-х мобильные телефоны звучали везде. Люди специально покупали рингтоны — короткие мелодии из популярных песен. Это был настоящий бум. В 2004 году мировой рынок рингтонов...

Геологическая аномалия Бермуд: как плавучий слой породы спасает острова от погружения

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

Земля выплюнула Луну: гипотеза внутреннего взрыва отменяет столкновение с Тейей

Общепринятая модель формирования Луны в результате гигантского столкновения, на самом деле, очень противоречивая. Геохимические данные указывают на то, что у спутника Земли следов внешней материи...

✦ ИИ  Лист в форме трубки и сахарный антифриз: как ёлка выживает в -40°C

Нас учили, что елка «одним цветом», но это не вся правда. Разбираем, как дерево производит собственную незамерзайку, почему иголка — это свернутый лист и зачем ель сбрасывает хвою на самом деле.

✦ ИИ  Конец эпохи «пощупал и купил»: почему магазины электроники превратились в бесплатные примерочные для маркетплейсов

Помните, как поход в магазин техники был праздником? А теперь мы ходим туда как на разведку: пощупать товар и заказать его на маркетплейсе на 5000 дешевле. Разбираемся, почему оффлайн умирает.