最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入了解Python中Requests庫(kù)的使用

 更新時(shí)間:2023年07月16日 15:12:37   作者:CodeDevMaster  
Requests是一個(gè)功能強(qiáng)大的Python?HTTP庫(kù),用于發(fā)送HTTP請(qǐng)求,獲取響應(yīng)數(shù)據(jù),本文主要來(lái)和大家聊聊它的用法,需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下

Requests模塊

Requests是一個(gè)功能強(qiáng)大的Python HTTP庫(kù),用于發(fā)送HTTP請(qǐng)求,獲取響應(yīng)數(shù)據(jù)。它簡(jiǎn)化了與HTTP資源的交互,提供了簡(jiǎn)潔且易于使用的API。

文檔:https://requests.readthedocs.io/projects/cn/zh_CN/latest/

要使用Requests模塊,首先需要安裝它,可以使用pip來(lái)安裝最新版本的Requests

pip install requests
pip3 install requests

簡(jiǎn)單使用

安裝完成后,就可以在Python代碼中導(dǎo)入Requests模塊并使用它了。

發(fā)送GET請(qǐng)求

使用Requests發(fā)送GET請(qǐng)求:

# 導(dǎo)入模塊
import requests
# 目標(biāo)url
url = 'https://www.baidu.com'
# 向目標(biāo)url發(fā)送get請(qǐng)求
response = requests.get(url)
# 打印響應(yīng)內(nèi)容
print(response.text)
# 解碼:解決中文亂碼問(wèn)題
print(response.content.decode())

發(fā)送POST請(qǐng)求

使用Requests發(fā)送POST請(qǐng)求:

# 導(dǎo)入模塊
import requests
# 定義請(qǐng)求地址
url = 'http://127.0.0.1:8080/login'
# 定義自定義請(qǐng)求頭
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請(qǐng)求參數(shù)
data = {
    "username": "admin",
    "password": "123456"
}
# 使用 POST 請(qǐng)求參數(shù)發(fā)送請(qǐng)求
response = requests.post(url, headers=headers, data=data)
# 獲取響應(yīng)的 html 內(nèi)容
html = response.content.decode("utf-8")
print(html)

使用Response響應(yīng)對(duì)象

獲取響應(yīng)內(nèi)容可以使用response.textresponse.content

response.text是將response.content(bytes類型)進(jìn)行解碼的字符串。

response.content是直接從網(wǎng)絡(luò)上抓取的數(shù)據(jù),沒(méi)有經(jīng)過(guò)任何解碼,是一個(gè) bytes類型的數(shù)據(jù)。

解碼需要指定一個(gè)編碼方式,服務(wù)器不指定的話, requests會(huì)根據(jù)HTTP頭部對(duì)響應(yīng)的編碼,如<meta charset="utf-8">進(jìn)行猜測(cè),默認(rèn)編碼是"ISO-8859-1"。猜測(cè)錯(cuò)誤,就會(huì)導(dǎo)致解碼產(chǎn)生亂碼。因此需要使用response.content.decode()來(lái)解決中文亂碼

decode函數(shù)解決中文亂碼

常見編碼字符集

utf-8
gbk
gb2312
ascii
iso-8859-1

response.content.decode() 默認(rèn)utf-8
response.content.decode("GBK")

常用屬性或方法

  • response = requests.get(url):response是發(fā)送請(qǐng)求獲取的響應(yīng)對(duì)象
  • response.text、response.content:獲取響應(yīng)內(nèi)容
  • response.url響應(yīng)的url:有時(shí)候響應(yīng)的url和請(qǐng)求的url并不一致
  • response.status_code:響應(yīng)狀態(tài)碼
  • response.request.headers:響應(yīng)對(duì)象的請(qǐng)求頭
  • response.headers:響應(yīng)頭
  • response.request._cookies:響應(yīng)對(duì)應(yīng)請(qǐng)求的cookie,返回cookieJar類型
  • response.cookies:應(yīng)中攜帶的cookies,經(jīng)過(guò)set-cookie動(dòng)作,返回cookieJar類型
  • response.json():自動(dòng)將json字符串類型的響應(yīng)內(nèi)容轉(zhuǎn)換為python對(duì)象(dict or list)

設(shè)置headers請(qǐng)求頭

可以使用headers參數(shù)來(lái)設(shè)置請(qǐng)求頭

headers參數(shù)用于攜帶請(qǐng)求頭發(fā)送請(qǐng)求的方法

headers參數(shù)接收字典形式的請(qǐng)求頭,請(qǐng)求頭字段名作為key,字段對(duì)應(yīng)的值作為value

import requests
# 目標(biāo)url
url = 'https://www.baidu.com'
# 請(qǐng)求頭
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"}
# 向目標(biāo)url發(fā)送get請(qǐng)求
response = requests.get(url, headers=headers)
# 打印響應(yīng)內(nèi)容
print(response.content.decode())
# 打印請(qǐng)求頭信息
print(response.request.headers)

處理Cookies

1.攜帶cookie

在headers參數(shù)中攜帶cookie。

從瀏覽器中復(fù)制User-Agent和Cookie

瀏覽器中的請(qǐng)求頭字段和值與headers參數(shù)中必須一致

headers請(qǐng)求參數(shù)字典中的Cookie鍵對(duì)應(yīng)的值是字符串

# 請(qǐng)求頭
import requests
# 構(gòu)造請(qǐng)求頭字典
headers = {
    # 瀏覽器中復(fù)制的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',
    # 瀏覽器中復(fù)制的Cookie
    'Cookie': 'BIDUPSID=DA34A47255629CF319B6868F08DC207F; PSTM=1658846527; BAIDUID=DA34A47255629CF32D59A4FD90F6BB95:SL=0:NR=10:FG=1;'
}
url = 'https://www.baidu.com/s'
# 請(qǐng)求參數(shù) 字典
params = {'wd': 'java'}
# 向目標(biāo)url發(fā)送get請(qǐng)求
response = requests.get(url, headers=headers, params=params)
# 打印響應(yīng)內(nèi)容
print(response.content.decode())

2.cookies參數(shù)

可以在headers參數(shù)中攜帶cookie,也可以使用專門的cookies參數(shù)。cookie一般有過(guò)期時(shí)間,一旦過(guò)期需要重新獲取

cookies參數(shù)是一個(gè)字典形式:

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

cookies參數(shù)的使用:

# 構(gòu)造cookies字典
cookies_str = '瀏覽器中復(fù)制的cookies字符串'
cookies_dict = {cookie.split('=')[0]: cookie.split('=')[-1] for cookie in cookies_str.split('; ')}
# 請(qǐng)求頭參數(shù)字典中攜帶cookie字符串
response = requests.get(url, headers=headers, cookies=cookies_dict)

3.cookieJar對(duì)象

使用requests獲取的resposne對(duì)象,具有cookies屬性。該屬性值是一個(gè)cookieJar類型,包含服務(wù)器設(shè)置在本地的cookie。

cookies操作

# 返回 RequestsCookieJar對(duì)象
cookies = response.cookies
# RequestsCookieJar 轉(zhuǎn) cookies字典
requests.utils.dict_from_cookiejar(cookies)
# cookies字典 轉(zhuǎn) RequestsCookieJar
requests.utils.cookiejar_from_dict()
# 對(duì)cookie進(jìn)行操作,把一個(gè)字典添加到cookiejar中
requests.utils.add_dict_to_cookiejar()

設(shè)置超時(shí)時(shí)間

使用timeout參數(shù)來(lái)設(shè)置請(qǐng)求的超時(shí)時(shí)間(秒)。

import requests
url = 'url'
# 設(shè)置超時(shí)時(shí)間,發(fā)送請(qǐng)求后,3秒鐘內(nèi)返回響應(yīng),否則就拋出異常
response = requests.get(url, timeout=3)

發(fā)送帶參數(shù)的請(qǐng)求

在url攜帶參數(shù)

import requests
# 目標(biāo)url
url = 'https://www.baidu.com/s?wd=java'
# 請(qǐng)求頭
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"}
# 向目標(biāo)url發(fā)送get請(qǐng)求
response = requests.get(url, headers=headers)
# 打印響應(yīng)內(nèi)容
print(response.content.decode())

通過(guò)params攜帶參數(shù)

構(gòu)建請(qǐng)求參數(shù)字典,向接口發(fā)送請(qǐng)求的時(shí)候帶上參數(shù)字典,參數(shù)字典設(shè)置給params

# 請(qǐng)求頭
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'
# 請(qǐng)求參數(shù) 字典
params = {'wd': 'java'}
# 向目標(biāo)url發(fā)送get請(qǐng)求
response = requests.get(url, headers=headers, params=params)
# 打印響應(yīng)內(nèi)容
print(response.content.decode())

proxy代理

概述

在Requests模塊中,可以使用代理服務(wù)器proxy來(lái)發(fā)送HTTP請(qǐng)求。代理可以在你和目標(biāo)服務(wù)器之間充當(dāng)中間人,用于在請(qǐng)求過(guò)程中轉(zhuǎn)發(fā)請(qǐng)求和響應(yīng)。使用代理有多種用途,例如隱藏真實(shí)的IP地址、繞過(guò)網(wǎng)絡(luò)限制等。

通過(guò)指定代理IP,可以讓代理服務(wù)器轉(zhuǎn)發(fā)發(fā)送請(qǐng)求。這種方式被稱為正向代理,它充當(dāng)了客戶端和目標(biāo)服務(wù)器之間的中間人,代理服務(wù)器接收來(lái)自客戶端的請(qǐng)求,并將其轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器,然后將響應(yīng)返回給客戶端。

正向代理和反向代理區(qū)別:

1.正向代理

為發(fā)送請(qǐng)求的一方(瀏覽器或客戶端)轉(zhuǎn)發(fā)請(qǐng)求的,會(huì)知道最終處理請(qǐng)求的服務(wù)器的真實(shí)地址,例如VPN

2.反向代理

不為發(fā)送請(qǐng)求的一方(瀏覽器或客戶端)轉(zhuǎn)發(fā)請(qǐng)求、而是為最終處理請(qǐng)求的服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求的,不會(huì)知道服務(wù)器的真實(shí)地址,例如nginx

代理分類

1.根據(jù)代理ip的匿名程度,代理IP可以分為三類:

1.透明代理(Transparent Proxy):

透明代理雖然可以直接隱藏你的IP地址,但是還是可以查到你是誰(shuí)。

目標(biāo)服務(wù)器接收到的請(qǐng)求頭如下:

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

2.匿名代理(Anonymous Proxy):

使用匿名代理,別人只能知道你用了代理,無(wú)法知道你是誰(shuí)。

目標(biāo)服務(wù)器接收到的請(qǐng)求頭如下:

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

3.高匿代理(Elite proxy或High Anonymity Proxy):

高匿代理讓別人根本無(wú)法發(fā)現(xiàn)你是在用代理,所以是最好的選擇。毫無(wú)疑問(wèn)使用高匿代理效果最好。

目標(biāo)服務(wù)器接收到的請(qǐng)求頭如下:

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

2.根據(jù)網(wǎng)站所使用的協(xié)議不同,需要使用相應(yīng)協(xié)議的代理服務(wù)

從代理服務(wù)請(qǐng)求使用的協(xié)議可以分為:

proxies代理參數(shù)的使用

為了讓服務(wù)器以為不是同一個(gè)客戶端在請(qǐng)求,為了防止頻繁向一個(gè)域名發(fā)送請(qǐng)求被封ip,所以需要使用代理ip

http代理:目標(biāo)url為http協(xié)議

https代理:目標(biāo)url為https協(xié)議

socks隧道代理,例如socks5代理:

  • socks 代理只是簡(jiǎn)單地傳遞數(shù)據(jù)包,不關(guān)心是何種應(yīng)用協(xié)議(FTP、HTTP和HTTPS等)
  • socks 代理比http、https代理耗時(shí)少
  • socks 代理可以轉(zhuǎn)發(fā)http和https的請(qǐng)求

注意:

如果proxies字典中包含有多個(gè)鍵值對(duì),發(fā)送請(qǐng)求時(shí)將按照url地址的協(xié)議來(lái)選擇使用相應(yīng)的代理ip

其他功能服務(wù)

忽略CA證書

瀏覽器訪問(wèn)某些網(wǎng)址時(shí),會(huì)提示:您的連接不是私密連接,這是因?yàn)榫W(wǎng)站的CA證書沒(méi)有經(jīng)過(guò)受信任的根證書頒發(fā)機(jī)構(gòu)的認(rèn)證。當(dāng)執(zhí)行請(qǐng)求時(shí),會(huì)拋出包含ssl.CertificateError等字樣的異常。

import requests
url = "url "
# 設(shè)置忽略證書 verify參數(shù)設(shè)置為False表示不驗(yàn)證CA證書
response = requests.get(url,verify=False)

圖片下載

下載圖片時(shí),后綴名和請(qǐng)求的后綴名一致,必須使用response.content進(jìn)行保存文件

import requests
# 下載圖片地址
url = "https://pic.netbian.com/uploads/allimg/180826/113958-153525479855be.jpg"
# 發(fā)送請(qǐng)求獲取響應(yīng)
response = requests.get(url)
# 保存圖片
with open('image.png', 'wb') as f:
    f.write(response.content)

重試處理

retrying模塊可以通過(guò)裝飾器模式對(duì)某個(gè)函數(shù)進(jìn)行監(jiān)控,如果該函數(shù)引發(fā)異常就會(huì)觸發(fā)重試操作

安裝retrying模塊

pip install retrying
# 導(dǎo)入模塊
import time
import requests
# 使用第三方模塊 retrying 模塊
from retrying import retry
# 使用裝飾器進(jìn)行重試設(shè)置
# stop_max_attempt_number 表示重試次數(shù)
@retry(stop_max_attempt_number=3)
def test():
    print("Test 重試次數(shù)")
    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"
    # 設(shè)置超時(shí)參數(shù)
    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 重試次數(shù)
Test 重試次數(shù)
Test 重試次數(shù)
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狀態(tài)保持

requests模塊中的Session類能夠自動(dòng)處理發(fā)送請(qǐng)求獲取響應(yīng)過(guò)程中產(chǎn)生的cookie,進(jìn)而達(dá)到狀態(tài)保持的目的。

session實(shí)例在請(qǐng)求一個(gè)網(wǎng)站后,對(duì)方服務(wù)器設(shè)置在本地的cookie會(huì)保存在session中,下一次再使用session請(qǐng)求對(duì)方服務(wù)器的時(shí)候,會(huì)帶上前一次的cookie

session對(duì)象發(fā)送get或post請(qǐng)求的參數(shù),與requests模塊發(fā)送請(qǐng)求的參數(shù)完全一致

# 實(shí)例化session對(duì)象
session = requests.session() 
# 一次請(qǐng)求
response = session.get(url, headers)
# 下一次請(qǐng)求
response = session.post(url, data)

以上就是深入了解Python中Requests庫(kù)的使用的詳細(xì)內(nèi)容,更多關(guān)于Python Requests庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python3如何解決字符編碼問(wèn)題詳解

    Python3如何解決字符編碼問(wèn)題詳解

    字符串是一種數(shù)據(jù)類型,但是,字符串比較特殊的是還有一個(gè)編碼問(wèn)題。下面這篇文章主要給大家介紹了關(guān)于Python3如何解決字符編碼問(wèn)題的相關(guān)資料,文中介紹的還是相對(duì)比較詳細(xì)的,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-04-04
  • Python中exit、return、sys.exit()等使用實(shí)例和區(qū)別

    Python中exit、return、sys.exit()等使用實(shí)例和區(qū)別

    這篇文章主要介紹了Python中exit、return、sys.exit()等使用實(shí)例和區(qū)別,本文是一個(gè)實(shí)際項(xiàng)目中的總結(jié),需要的朋友可以參考下
    2015-05-05
  • Python通過(guò)命令行向Scrapy傳遞參數(shù)

    Python通過(guò)命令行向Scrapy傳遞參數(shù)

    crapy作為一個(gè)強(qiáng)大的Web爬取框架,提供了靈活的命令行參數(shù)傳遞功能,本文介紹了通過(guò)命令行向Scrapy爬蟲傳遞參數(shù)的方法,旨在增強(qiáng)爬蟲的靈活性和可配置性,感興趣的可以了解一下
    2024-10-10
  • 使用Python實(shí)現(xiàn)音頻降噪功能

    使用Python實(shí)現(xiàn)音頻降噪功能

    在音頻處理領(lǐng)域,背景噪聲是一個(gè)常見的問(wèn)題,為了提高音頻的質(zhì)量,我們需要對(duì)音頻進(jìn)行降噪處理,本文將介紹如何使用 Python 實(shí)現(xiàn)音頻降噪,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • pandas溫差查詢案例的實(shí)現(xiàn)

    pandas溫差查詢案例的實(shí)現(xiàn)

    本文主要介紹了pandas溫差查詢案例的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • python實(shí)現(xiàn)批量監(jiān)聽頁(yè)面并發(fā)送郵件

    python實(shí)現(xiàn)批量監(jiān)聽頁(yè)面并發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了python如何實(shí)現(xiàn)自動(dòng)化批量監(jiān)聽頁(yè)面并發(fā)送郵件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • Python推導(dǎo)式之字典推導(dǎo)式和集合推導(dǎo)式使用體驗(yàn)

    Python推導(dǎo)式之字典推導(dǎo)式和集合推導(dǎo)式使用體驗(yàn)

    這篇文章主要為大家介紹了Python推導(dǎo)式之字典推導(dǎo)式和集合推導(dǎo)式使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Python隊(duì)列的定義與使用方法示例

    Python隊(duì)列的定義與使用方法示例

    這篇文章主要介紹了Python隊(duì)列的定義與使用方法,結(jié)合具體實(shí)例形式分析了Python定義及使用隊(duì)列的具體操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-06-06
  • C++與Python混合編程實(shí)戰(zhàn)(附詳細(xì)示例)

    C++與Python混合編程實(shí)戰(zhàn)(附詳細(xì)示例)

    這篇文章主要介紹了C++與Python混合編程的相關(guān)資料,通過(guò)將 Python 與 C/C++ 混合編程,可以有效提高關(guān)鍵任務(wù)的執(zhí)行效率,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-10-10
  • Python基礎(chǔ)教程之循環(huán)語(yǔ)句(for、while和嵌套循環(huán))

    Python基礎(chǔ)教程之循環(huán)語(yǔ)句(for、while和嵌套循環(huán))

    這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之循環(huán)語(yǔ)句(for、while和嵌套循環(huán))的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

德安县| 宽城| 湘乡市| 雅安市| 铁力市| 英德市| 叙永县| 津南区| 平陆县| 扶沟县| 崇礼县| 永登县| 阳高县| 阳原县| 文安县| 峨眉山市| 海晏县| 南木林县| 南乐县| 会昌县| 临海市| 静乐县| 定安县| 平南县| 安阳县| 德昌县| 通辽市| 东兴市| 公主岭市| 盐池县| 长沙市| 绥芬河市| 施甸县| 嘉祥县| 通渭县| 辰溪县| 新巴尔虎右旗| 平南县| 门头沟区| 宜昌市| 永和县|