Модуль requests в Python
Python requests — это часто используемая библиотека HTTP-запросов, которая позволяет удобно отправлять HTTP-запросы на веб-сайты и получать результаты ответов.
Модуль requests более лаконичен, чем модульurllib.
Чтобы отправлять HTTP-запросы с помощью requests, сначала нужно импортировать модуль requests:
import requests
После импорта можно отправлять HTTP-запросы. Используйте методы, предоставляемые requests, чтобы отправить HTTP-запрос по указанному URL, например:
Пример
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 ответа |
Пример
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:
Пример
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():
Пример
import requests
# Отправить запрос
x = requests.request('get', 'https://www.example.com/')
# Возвращает содержимое веб-страницы
print(x.status_code)
Результат вывода следующий:
200
Задать заголовки запроса:
Пример
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 и т. д.
Пример
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-запрос с параметрами:
Пример
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 и т. д.
Другие расширения