Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python
Code

Использование модуля Requests в Python

by
Difficulty:IntermediateLength:MediumLanguages:

Russian (Pусский) translation by Anna k.Ivanova (you can also view the original English article)

Requests - это модуль Python, который вы можете использовать для отправки всех видов HTTP-запросов. Это простая в использовании библиотека с множеством функций, начиная от передачи параметров в URL-адресах до отправки пользовательских заголовков и проверки SSL. В этом уроке вы узнаете, как использовать эту библиотеку для отправки простых HTTP-запросов в Python.

Вы можете использовать Запросы с Python версии 2.6-2.7 и 3.3-3.6. Прежде чем продолжить, вы должны знать о том, что Requests является внешним модулем, поэтому сначала вам нужно будет установить его, прежде чем попробовать примеры из этого урока. Вы можете установить его, выполнив следующую команду в терминале:

После установки модуля вы можете проверить, был ли он успешно установлен, импортировав его с помощью этой команды:

Если установка прошла успешно, вы не увидите никаких сообщений об ошибках.

Создание запроса GET

Очень просто отправить HTTP-запрос с помощью Requests. Сначала вы импортируете модуль и затем выполните запрос. Вот пример:

Вся информация о нашем запросе теперь хранится в объекте Response, называемом req. Например, вы можете получить кодировку веб-страницы, используя свойство req.encoding. Вы также можете получить код состояния запроса, используя свойство req.status_code.

Вы можете получить доступ к файлам cookie, отправленным сервером с помощью req.cookies. Аналогично, вы можете получить заголовки ответов, используя req.headers. Свойство req.headers возвращает нечувствительный к регистру словарь заголовков ответов. Это означает, что req.headers['Content-Length'], req.headers['content-length'] и req.headers['CONTENT-LENGTH'] вернут значение заголовка ответа Content-Length.

Вы можете проверить, является ли ответ корректным HTTP-перенаправлением, которое могло быть обработано автоматически с использованием свойства req.is_redirect. Он будет возвращать True или False на основе ответа. Вы также можете получить время, прошедшее между отправкой запроса и возвратом ответа с использованием свойства req.elapsed.

URL, который вы первоначально передали функции get(), может отличаться от конечного URL-адреса ответа по целому ряду причин, включая перенаправления. Чтобы увидеть окончательный URL-адрес ответа, вы можете использовать свойство req.url.

Получение всей этой информации о веб-странице, к которой вы обращаетесь, приятно, но вы, скорее всего, хотите получить доступ к фактическому контенту. Если контент, к которому вы обращаетесь, является текстом, вы можете использовать свойство req.text для доступа к нему. Затем содержимое анализируется как unicode. Вы можете передать кодировку, с помощью которой можно декодировать текст, используя свойство req.encoding.

В случае нетекстовых ответов вы можете получить к ним доступ в двоичной форме, используя req.content. Модуль автоматически расшифровывает gzip и deflate кодирование передачи. Это может быть полезно, когда вы имеете дело с медиафайлами. Аналогично, вы можете получить доступ к json-закодированному контенту ответа, если он существует, используя req.json().

Вы также можете получить исходный ответ с сервера, используя req.raw. Имейте в виду, что вам придется передать stream=True в запросе, чтобы получить исходный ответ.

Некоторые файлы, которые вы загружаете из Интернета с помощью модуля Requests, могут иметь огромный размер. В таких случаях неразумно загружать весь ответ или файл в память сразу. Вы можете загрузить файл на куски или фрагменты, используя метод iter_content(chunk_size = 1, decode_unicode = False).

Этот метод выполняет итерацию по данным ответа в chunk_size количество байтов одновременно. Когда в запросе задан stream = True, этот метод не позволит сразу считывать весь файл в память для больших ответов. Параметр chunk_size может быть integer или None. Когда установлено значение integer, chunk_size определяет количество байтов, которые должны быть прочитаны в памяти.

Если для параметра chunk_size установлено значение None, а для stream установлено значение True, данные будут считаны по мере того, как он достигнет любого размера кусков. Если для параметра chunk_size установлено значение None, а для stream установлено значение False, все данные будут возвращены как один кусок.

Давайте загрузим этот образ леса на Pixabay с помощью модуля Requests. Вот фактическое изображение:

Forest Image Downloaded Using Python Requests Module

Это код, который вам нужен:

'path/to/forest.jpg' - это фактический URL изображения; вы можете поместить URL-адрес любого другого изображения здесь, чтобы загрузить что-то еще. Данный файл изображения имеет размер 185kb, и вы установили chunk_size в 50 000 байт. Это означает, что сообщение «Получено сообщение» должно быть напечатано четыре раза в терминале. Размер последнего фрагмента будет всего 39350 байт, потому что часть файла, которая остается полученной после первых трех итераций, составляет 39350 байт.

Запросы также позволяют передавать параметры в URL-адресе. Это может быть полезно при поиске на веб-странице некоторых результатов, таких как конкретный образ или учебник. Вы можете предоставить эти строки запроса как словарь строк, используя ключевое слово params в запросе GET. Вот пример:

Выполнение запроса POST

Выполнение запроса POST так же просто, как создание запросов GET. Вы просто используете функцию post() вместо get(). Это может быть полезно, когда вы автоматически отправляете формы. Например, следующий код загрузит всю страницу Википедии по нанотехнологии и сохранит ее на вашем ПК.

Отправка файлов cookie и заголовков

Как уже упоминалось ранее, вы можете получить доступ к файлам cookie и заголовкам, которые сервер отправляет вам обратно с помощью req.cookies и req.headers. Запросы также позволяют отправлять свои собственные cookie-файлы и заголовки с запросом. Это может быть полезно, если вы хотите, скажем, установить пользовательский агента для вашего запроса.

Чтобы добавить HTTP-заголовки в запрос, вы можете просто передать их в dict для параметра headers. Аналогично, вы также можете отправлять свои собственные файлы cookie на сервер, используя dict, переданный в параметр cookie.

Cookies также может быть передано в Cookie Jar. Они предоставляют более полный интерфейс, позволяющий использовать эти файлы cookie на нескольких путях. Вот пример:

Объекты сеанса

Иногда полезно сохранять определенные параметры для нескольких запросов. Объект Session делает именно это. Например, он будет сохранять данные cookie во всех запросах, сделанных с использованием того же сеанса. Объект Session использует объединение соединений urllib3. Это означает, что базовое TCP-соединение будет повторно использоваться для всех запросов, сделанных на один и тот же хост. Это может значительно повысить производительность. Вы также можете использовать методы объекта Requests с объектом Session.

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

Как вы можете видеть, cookie сеанса имеет другое значение в первом и втором запросах, но имеет такое же значение, когда мы использовали объект Session. При тестировании кода вы получите другое значение, но в вашем случае cookie для запросов, сделанных с использованием объекта сеанса, будет иметь такое же значение.

Сессии также полезны, если вы хотите отправлять одни и те же данные по всем запросам. Например, если вы решили отправить куки-файл или заголовок пользовательского агента со всеми запросами в данный домен, вы можете использовать объекты сеанса. Вот пример:

Как вы можете видеть, cookie сеанса "visit-month" отправляется со всеми тремя запросами. Однако cookie "visit-year" отправляется только во время второго запроса. В третьем запросе также не упоминается "vist-year". Это подтверждает тот факт, что файлы cookie или другие данные, установленные по отдельным запросам, не будут отправляться с другими запросами сеанса.

Заключение

Концепции, обсуждаемые в этом руководстве, должны помочь вам сделать базовые запросы на сервер путем передачи определенных заголовков, куки или строк запроса. Это будет очень удобно, когда вы пытаетесь получить данные с некоторых веб-страниц. Теперь вы также сможете автоматически загружать музыкальные файлы и обои с разных сайтов, как только вы определили шаблон в URL-адресах.

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

Если у вас есть какие-либо вопросы относительно этого урока, пожалуйста, дайте мне знать в комментариях.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.