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

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

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

Новости

Публикации

На каких оборотах ездить, чтобы двигатель служил долго и не ломался

Каждый водитель мечтает, чтобы его автомобиль служил долго и никогда не подводил в самые неподходящие моменты. Однако, чтобы эти мечты стали реальностью, необходимо знать, как правильно ухаживать...

Учимся различать мальчиков и девочек: обзор выставки «Память о счастье» в Музее Тропинина

Выставка «Память о счастье» приурочена к Году Семьи в России и представляет собой собрание семейных и детских портретов рубежа XVIII — XIX века. Коллекция рассказывает не только о людях,...

Хлопок, лён, а может вискоза: какой материал лучше всего выбрать для постельного белья

Постельное белье играет огромную роль в нашей жизни, особенно когда речь идет о качественном сне. На самом деле, это не просто ткань, которую мы используем каждую ночь. От выбора постельного белья...

Стоит ли покупать очки для чтения лежа: обзор очков-перископов на 90 градусов

В погоне за комфортом мы часто готовы пробовать новые гаджеты, которые могут облегчить нашу жизнь. Недавно я решил попробовать очки для «ленивого чтения», которые, как обещает производитель, должны...

Забытая река фараонов: как древний Нил помогал строить пирамиды

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

Почему исчезает стирка при 30°С у современных стиральных маши, и чем можно заменить эту программу

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