Использование библиотеки Python Requests

Модуль запросов

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

Документация:https://requests.readthedocs.io/projects/cn/zh_CN/latest/

Чтобы использовать модуль Requests, вам сначала нужно его установить, вы можете использовать pip для установки последней версии Requests

pip install requests

pip3 install requests

легко использовать

После установки вы можете импортировать модуль Requests в свой код Python и использовать его.

Отправить GET-запрос

Отправьте запрос GET с помощью Requests:

# 导入模块
import requests

# 目标url
url = 'https://www.baidu.com'

# 向目标url发送get请求
response = requests.get(url)

# 打印响应内容
print(response.text)

# 解码:解决中文乱码问题
print(response.content.decode())

Отправить POST-запрос

Используйте Запросы для отправки POST-запросов:

# 导入模块
import requests

# 定义请求地址
url = 'http://127.0.0.1:8080/login'
# 定义自定义请求头
headers = {
    
    
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}
# 定义post请求参数
data = {
    
    
    "username": "admin",
    "password": "123456"
}

# 使用 POST 请求参数发送请求
response = requests.post(url, headers=headers, data=data)
# 获取响应的 html 内容
html = response.content.decode("utf-8")
print(html)

Используйте объект ответа Response

Чтобы получить содержимое ответа, вы можете использовать response.textилиresponse.content

response.text是将response.content(bytes类型)进行解码的字符串。

response.content是直接从网络上抓取的数据,没有经过任何解码,是一个 bytes类型的数据。

Для декодирования необходимо указать метод кодирования. Если сервер не указывает его, запросы будут кодировать ответ в соответствии с заголовком HTTP. При <meta charset="utf-8">угадывании используется кодировка по умолчанию "ISO-8859-1". Если догадка неверна, это приведет к искажению символов при декодировании. Поэтому необходимо использовать response.content.decode()для решения китайские искаженные иероглифы.

Функция декодирования устраняет искаженные китайские символы.

Общие кодированные наборы символов

utf-8
gbk
gb2312
ascii
iso-8859-1
response.content.decode() 默认utf-8

response.content.decode("GBK")

общие свойства или методы

response = requests.get(url):response是发送请求获取的响应对象

response.text、response.content:获取响应内容

response.url响应的url:有时候响应的url和请求的url并不一致

response.status_code:响应状态码

response.request.headers:响应对象的请求头

response.headers:响应头

response.request._cookies:响应对应请求的cookie,返回cookieJar类型

response.cookies:应中携带的cookies,经过set-cookie动作,返回cookieJar类型

response.json():自动将json字符串类型的响应内容转换为python对象(dict or list

Установить заголовок запроса заголовков

可以使用headers参数来设置请求头

headers参数用于携带请求头发送请求的方法

headers参数接收字典形式的请求头,请求头字段名作为key,字段对应的值作为value
import requests

# 目标url
url = 'https://www.baidu.com'

# 请求头
headers = {
    
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"}

# 向目标url发送get请求
response = requests.get(url, headers=headers)

# 打印响应内容
print(response.content.decode())

# 打印请求头信息
print(response.request.headers)

Обработка файлов cookie

1. Носите с собой печенье

Нести куки в параметре заголовков.

从浏览器中复制User-Agent和Cookie

浏览器中的请求头字段和值与headers参数中必须一致

headers请求参数字典中的Cookie键对应的值是字符串
# 请求头
import requests

# 构造请求头字典
headers = {
    
    
    # 浏览器中复制的User-Agent
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36',
    # 浏览器中复制的Cookie
    'Cookie': 'BIDUPSID=DA34A47255629CF319B6868F08DC207F; PSTM=1658846527; BAIDUID=DA34A47255629CF32D59A4FD90F6BB95:SL=0:NR=10:FG=1;'
}
url = 'https://www.baidu.com/s'

# 请求参数 字典
params = {
    
    'wd': 'java'}

# 向目标url发送get请求
response = requests.get(url, headers=headers, params=params)

# 打印响应内容
print(response.content.decode())

2. Параметры файлов cookie

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

Параметр cookie представляет собой словарную форму:

cookies = {
    
    "cookie的name":"cookie的value"}

Использование параметров cookie:

# 构造cookies字典
cookies_str = '浏览器中复制的cookies字符串'

cookies_dict = {
    
    cookie.split('=')[0]: cookie.split('=')[-1] for cookie in cookies_str.split('; ')}

# 请求头参数字典中携带cookie字符串
response = requests.get(url, headers=headers, cookies=cookies_dict)

3. объект cookieJar

Объект ответа, полученный с помощью запросов, имеет атрибут cookie. Значением атрибута является тип cookieJar, который содержит локальный файл cookie, установленный сервером.

операция cookie

# 返回 RequestsCookieJar对象
cookies = response.cookies

# RequestsCookieJar 转 cookies字典
requests.utils.dict_from_cookiejar(cookies)

# cookies字典 转 RequestsCookieJar
requests.utils.cookiejar_from_dict()

# 对cookie进行操作,把一个字典添加到cookiejar中
requests.utils.add_dict_to_cookiejar()

установить тайм-аут

Используйте параметр timeout, чтобы установить время ожидания запроса (в секундах).

import requests

url = 'url'
# 设置超时时间,发送请求后,3秒钟内返回响应,否则就抛出异常
response = requests.get(url, timeout=3)

Отправить запрос с параметрами

Перенести параметры в URL

import requests

# 目标url
url = 'https://www.baidu.com/s?wd=java'

# 请求头
headers = {
    
    
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"}

# 向目标url发送get请求
response = requests.get(url, headers=headers)

# 打印响应内容
print(response.content.decode())

Переносить параметры через params

Создайте словарь параметров запроса, принесите словарь параметров при отправке запроса на интерфейс и установите словарь параметров в params

# 请求头
import requests

headers = {
    
    
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"}

url = 'https://www.baidu.com/s'

# 请求参数 字典
params = {
    
    'wd': 'java'}

# 向目标url发送get请求
response = requests.get(url, headers=headers, params=params)

# 打印响应内容
print(response.content.decode())

прокси-агент

обзор

В модуле «Запросы» прокси-сервер прокси-сервера можно использовать для отправки HTTP-запросов. Прокси действует как посредник между вами и целевым сервером, пересылая запросы и ответы по пути. Использование прокси-сервера может использоваться для различных целей, таких как сокрытие вашего реального IP-адреса, обход сетевых ограничений и многое другое.

Указав IP-адрес прокси-сервера, прокси-сервер может перенаправить запрос на отправку. Этот подход называется прямым прокси, он действует как посредник между клиентом и целевым сервером, прокси-сервер получает запрос от клиента, перенаправляет его на целевой сервер, а затем возвращает ответ клиенту.

Разница между прямым прокси и обратным прокси:

1. Прокси вперед

Те, кто пересылает запрос стороне, отправляющей запрос (браузеру или клиенту), будут знать реальный адрес сервера, который окончательно обрабатывает запрос, например VPN.

2. Обратный прокси

Запрос пересылается не той стороне, которая отправляет запрос (браузеру или клиенту), а серверу, который окончательно обрабатывает запрос, не зная реального адреса сервера, например nginx

Классификация агентов

1. По степени анонимности прокси IP, прокси IP можно разделить на три категории:

1. Прозрачный прокси:

Хотя прозрачный прокси-сервер может напрямую скрывать ваш IP-адрес, он все же может узнать, кто вы.

Заголовки запросов, полученные целевым сервером, следующие:

REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARDED_FOR = Your IP

2. Анонимный прокси:

Используя анонимный прокси, другие могут знать только то, что вы используете прокси, но не могут знать, кто вы такой.

Заголовки запросов, полученные целевым сервером, следующие:

REMOTE_ADDR = proxy IP
HTTP_VIA = proxy IP
HTTP_X_FORWARDED_FOR = proxy IP

3. Прокси с высокой анонимностью (Elite proxy или High Anonymity Proxy):

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

Заголовки запросов, полученные целевым сервером, следующие:

REMOTE_ADDR = Proxy IP
HTTP_VIA = not determined
HTTP_X_FORWARDED_FOR = not determined

2. В зависимости от протокола, используемого сайтом, необходимо использовать прокси-сервис соответствующего протокола.

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

http代理:目标url为http协议

https代理:目标url为https协议

socks隧道代理,例如socks5代理:
	socks 代理只是简单地传递数据包,不关心是何种应用协议(FTP、HTTP和HTTPS等)
	socks 代理比http、https代理耗时少
	socks 代理可以转发http和https的请求

Использование прокси параметров прокси

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

# 构造proxies字典
proxies = {
    
    
    "http": "http://ip:端口",
    "https": "https://ip:端口",
}

response = requests.get(url, proxies=proxies)

Уведомление:

Если словарь прокси содержит несколько пар ключ-значение, соответствующий ip прокси будет выбран в соответствии с протоколом URL-адреса при отправке запроса.

Другие функциональные услуги

Игнорировать сертификат ЦС

Когда браузер получает доступ к определенным URL-адресам, он запрашивает: 您的连接不是私密连接, это потому, что сертификат ЦС веб-сайта не был 受信任的根证书颁发机构сертифицирован. Когда запрос выполняется, ssl.CertificateErrorсоздается исключение, содержащее слова и т. д.

import requests

url = "url "
# 设置忽略证书 verify参数设置为False表示不验证CA证书
response = requests.get(url,verify=False)

скачать картинку

При загрузке изображений имя суффикса совпадает с запрошенным именем суффикса, и для сохранения файла необходимо использовать response.content.

import requests

# 下载图片地址
url = "https://pic.netbian.com/uploads/allimg/180826/113958-153525479855be.jpg"
# 发送请求获取响应
response = requests.get(url)
# 保存图片
with open('image.png', 'wb') as f:
    f.write(response.content)

повторить обработку

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

Установите модуль повторных попыток

pip install retrying
# 导入模块
import time

import requests
# 使用第三方模块 retrying 模块
from retrying import retry


# 使用装饰器进行重试设置
# stop_max_attempt_number 表示重试次数
@retry(stop_max_attempt_number=3)
def test():
    print("Test 重试次数")
    headers = {
    
    
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
    }
    url = "http://127.0.0.1:8888"
    # 设置超时参数
    response = requests.get(url, headers=headers, timeout=1)

    return response.text


if __name__ == '__main__':
    try:
        html = test()
    except Exception as e:
        print(e)

    time.sleep(10)
Test 重试次数
Test 重试次数
Test 重试次数
HTTPConnectionPool(host='127.0.0.1', port=8888): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x000001CF901742B0>, 'Connection to 127.0.0.1 timed out. (connect timeout=1)'))

состояние сеанса сохраняется

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

После того, как экземпляр сеанса запрашивает веб-сайт, локальный файл cookie, установленный другим сервером, будет сохранен в сеансе, и в следующий раз, когда сеанс будет использоваться для запроса другого сервера, будет передан предыдущий файл cookie.

Параметры, отправляемые объектом сеанса для получения или отправки запросов, точно такие же, как и параметры, отправляемые модулем запросов.

# 实例化session对象
session = requests.session() 
# 一次请求
response = session.get(url, headers)
# 下一次请求
response = session.post(url, data)

Supongo que te gusta

Origin blog.csdn.net/qq_38628046/article/details/129016909
Recomendado
Clasificación