Модуль requests в Python

Python requests — это часто используемая библиотека HTTP-запросов, которая позволяет удобно отправлять HTTP-запросы на веб-сайты и получать результаты ответов.

Модуль requests более лаконичен, чем модульurllib.

Чтобы отправлять HTTP-запросы с помощью requests, сначала нужно импортировать модуль requests:

import requests

После импорта можно отправлять HTTP-запросы. Используйте методы, предоставляемые requests, чтобы отправить HTTP-запрос по указанному URL, например:

Пример

# Импорт пакета requests
import requests

# Отправить запрос
x = requests.get('https://www.example.com/')

# Возвращает содержимое веб-страницы
print(x.text)

После каждого вызова requests возвращается объект ответа. Этот объект содержит конкретную информацию об ответе, такую как код состояния, заголовки ответа, содержимое ответа и т. д.:

print(response.status_code)  # 获取响应状态码
print(response.headers)  # 获取响应头
print(response.content)  # 获取响应内容

Дополнительная информация об ответе приведена ниже:

Атрибут или метод Описание
apparent_encoding Кодирование
close() Закрывает соединение с сервером
content Возвращает содержимое ответа в байтах
cookies Возвращает объект CookieJar, содержащий куки, отправленные сервером
elapsed Возвращает объект timedelta, содержащий время, прошедшее с момента отправки запроса до получения ответа; его можно использовать для проверки скорости ответа. Например, r.elapsed.microseconds показывает, сколько микросекунд требуется для получения ответа.
encoding Кодировка, используемая для декодирования r.text
headers Возвращает заголовки ответа в формате словаря
history Возвращает список объектов ответа, содержащих историю запросов (url)
is_permanent_redirect Возвращает True, если ответ является URL с постоянным перенаправлением, в противном случае возвращает False
is_redirect Возвращает True, если ответ был перенаправлен, в противном случае возвращает False
iter_content() Выполняет итерацию по ответу
iter_lines() Выполняет итерацию по строкам ответа
json() Возвращает объект JSON с результатом (результат должен быть записан в формате JSON, иначе будет вызвана ошибка)
links Возвращает разобранные ссылки заголовков ответа
Далее Возвращает объект PreparedRequest для следующего запроса в цепочке перенаправлений
ok Проверяет значение "status_code", возвращает True, если оно меньше 400, и возвращает False, если оно не меньше 400
raise_for_status() Если возникает ошибка, метод возвращает объект HTTPError
reason Описание статуса ответа, например "Not Found" или "OK"
request Возвращает объект запроса, который запросил этот ответ
status_code Возвращает код состояния HTTP, например 404 и 200 (200 — OK, 404 — Not Found)
text Возвращает содержимое ответа как данные типа Unicode
url Возвращает URL ответа

Пример

# Импорт пакета requests
import requests

# Отправить запрос
x = requests.get('https://www.example.com/')

# Возвращает код состояния HTTP
print(x.status_code)

# Описание статуса ответа
print(x.reason)

# Возврат кодировки
print(x.apparent_encoding)

Результат вывода следующий:

200
OK
utf-8

Запросить файл данных JSON и вернуть содержимое JSON:

Пример

# Импорт пакета requests
import requests

# Отправить запрос
x = requests.get('https://www.example.com/try/ajax/json_demo.json')

# Возврат данных JSON
print(x.json())

Результат вывода следующий:

{'name': '网站', 'num': 3, 'sites': [{'name': 'Google', 'info': ['Android', 'Google 搜索', 'Google 翻译']}, {'name': 'Example', 'info': ['Example', 'Example工具', 'Example微信']}, {'name': 'Taobao', 'info': ['淘宝', '网购']}]}

Методы requests

Методы requests следующие:

Метод Описание
delete(url, args) Отправляет DELETE-запрос на указанный URL
get(url, params, args) Отправляет GET-запрос на указанный URL
head(url, args) Отправляет HEAD-запрос на указанный URL
patch(url, data, args) Отправляет PATCH-запрос на указанный URL
post(url, data, json, args) Отправляет POST-запрос на указанный URL
put(url, data, args) Отправляет PUT-запрос на указанный URL
request(method, url, args) Отправляет запрос указанным методом на указанный URL

Отправьте GET-запрос с помощью requests.request():

Пример

# Импорт пакета requests
import requests

# Отправить запрос
x = requests.request('get', 'https://www.example.com/')

# Возвращает содержимое веб-страницы
print(x.status_code)

Результат вывода следующий:

200

Задать заголовки запроса:

Пример

# Импорт пакета requests
import requests

 
kw = {'s':'python tutorial'}

# Задать заголовки запроса
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
 
# params принимает параметры запроса как словарь или строку. Словарные типы автоматически преобразуются в URL-кодирование, нет необходимости в urlencode()
response = requests.get("https://www.example.com/", params = kw, headers = headers)

# Просмотреть код состояния ответа
print (response.status_code)

# Просмотреть кодировку символов заголовка ответа
print (response.encoding)

# Просмотреть полный URL-адрес
print (response.url)

# Просмотр содержимого ответа, response.text возвращает данные в формате Unicode
print(response.text)

Результат вывода следующий:

200
UTF-8
https://www.example.com/?s=python+%E6%95%99%E7%A8%8B

... 其他内容...

Метод post() может отправить POST-запрос по указанному URL. Общий формат выглядит так:

requests.post(url, data={key: value}, json={key: value}, args)
  • urlURL для запроса.

  • dataПараметр data — это словарь, список кортежей, байты или файловый объект, отправляемый по указанному URL.

  • jsonПараметр json — это объект JSON для отправки по указанному URL.

  • argsДругие параметры, такие как cookies, headers, verify и т. д.

Пример

# Импорт пакета requests
import requests

# Отправить запрос
x = requests.post('https://www.example.com/try/ajax/demo_post.php')

# Возвращает содержимое веб-страницы
print(x.text)

Результат вывода следующий:

<p style='color:red;'>本内容是使用 POST 方法请求的。</p><p style='color:red;'>请求时间:
2022-05-26 17:30:47</p>

POST-запрос с параметрами:

Пример

# Импорт пакета requests
import requests

# Параметры формы, имена параметров — fname и lname
myobj = {'fname': 'EXAMPLE','lname': 'Boy'}

# Отправить запрос
x = requests.post('https://www.example.com/try/ajax/demo_post2.php', data = myobj)

# Возвращает содержимое веб-страницы
print(x.text)

Результат вывода следующий:

<p style='color:red;'>你好,EXAMPLE Boy,今天过得怎么样?</p>

Дополнительные параметры запроса

При отправке запроса мы можем прикреплять к запросу дополнительные параметры, такие как заголовки запроса, параметры запроса, тело запроса и т. д., например:

headers = {'User-Agent': 'Mozilla/5.0'}  # 设置请求头
params = {'key1': 'value1', 'key2': 'value2'}  # 设置查询参数
data = {'username': 'example', 'password': '123456'}  # 设置请求体
response = requests.post('https://www.example.com', headers=headers, params=params, data=data)

Приведённый выше код отправляет POST-запрос с дополнительными заголовками запроса, параметрами запроса и телом запроса.

Помимо базовых GET- и POST-запросов, requests также поддерживает другие методы HTTP, такие как PUT, DELETE, HEAD, OPTIONS и т. д.

Другие расширения