Python使用requests庫發(fā)送請(qǐng)求的示例代碼
前言
得益于各位技術(shù)大佬,經(jīng)過封裝后的requests庫提供了一系列的接口,讓我們可以更加便利地發(fā)送請(qǐng)求,管理Cookies和Session,以及驗(yàn)證代理等一系列操作。如果發(fā)現(xiàn)本文中有哪些錯(cuò)誤,請(qǐng)不吝指正。
各種 HTTP 請(qǐng)求方法,不在話下
與原生的urllib庫相比,requests庫提供了更簡(jiǎn)潔、易于理解和使用的API,使發(fā)送HTTP請(qǐng)求變得更加直觀和高效
import requests # 導(dǎo)入工具包
r = requests.get('https://httpbin.org/get') # GET 請(qǐng)求
print(r.status_code) # 狀態(tài)碼
print(r.headers) # 請(qǐng)求頭
print(type(r)) # 類型
在這里,我們直接調(diào)用requests.get()函數(shù),打開URL,并將返回的信息集合成一個(gè)對(duì)象,并賦值給r。于是,我們便可以通過r這個(gè)requests.models.Response 類型對(duì)象 的屬性,來查看狀態(tài)碼等響應(yīng)信息。
神奇的是,不僅GET請(qǐng)求可以這樣做,PUT、DELETE等請(qǐng)求也可以如此這般:
r = requests.post('https://httpbin.org/post', data={'key': 'value'}) # POST 請(qǐng)求
r = requests.put('https://httpbin.org/put', data={'key': 'value'}) # PUT 請(qǐng)求
r = requests.delete('https://httpbin.org/delete') # DELETE 請(qǐng)求
r = requests.head('https://httpbin.org/get') # HEAD 請(qǐng)求
r = requests.options('https://httpbin.org/get') # OPTIONS 請(qǐng)求
糟糕糟糕,請(qǐng)求錯(cuò)誤OMG
跌落谷底并不可怕,可怕的是茫然四顧卻束手無措。在Python的requests庫中,我們也可以很方便地使用異常處理機(jī)制來有效捕捉和處理各種不同的異常。
import requests # 導(dǎo)入工具包
try: # 用try和except塊捕捉可能的異常
response = requests.get('https://baidu.com')
response.raise_for_status()
except requests.exception.HTTPError as e:
print('HTTP 錯(cuò)誤:', e)
response = requests.get('https://baidu.com'),如同上面所說,用requests.get()方法發(fā)出HTTP請(qǐng)求,并將響應(yīng)信息集合成實(shí)例對(duì)象responseresponse.raise_for_status(),該方法用來檢查響應(yīng)信息的狀態(tài)碼,如果狀態(tài)碼是一個(gè)錯(cuò)誤(比如404 Not Found或500 Internal Server Error等),則會(huì)引發(fā)requests.exceptions.HTTPError異常,從而使代碼跳轉(zhuǎn)except模塊,方便處理異常except requests.exception.HTTPError as e:,該語句進(jìn)行異常處理,用于捕獲requests庫中的HTTPError異常,并將其存儲(chǔ)在變量e中,以便對(duì)異常對(duì)象進(jìn)行訪問或處理
當(dāng)然,請(qǐng)求錯(cuò)誤有很多類型,不止剛才提到的HTTP錯(cuò)誤異常(HTTPError),還有連接異常(ConnectionError) 和 超時(shí)異常(Timeout) 等異常情況。要想捕捉這些異常也非常簡(jiǎn)單,只需要把except requests.exception.HTTPError as e:語句中的HTTPError改成相應(yīng)的異常名稱即可。
Session會(huì)話,持久高效
在urllin庫中,Session會(huì)話狀態(tài)不易維護(hù),我們需要手動(dòng)管理每個(gè)請(qǐng)求的cookies,代碼量較大且不夠簡(jiǎn)潔。而requests庫提供了非常靈活的管理接口,可以輕松地在多個(gè)會(huì)話之間保持會(huì)話狀態(tài)信息。
作為新手,我常?;煜?strong>Session和Cookies這兩者的概念。事實(shí)上,由于各個(gè)HTTP請(qǐng)求是無狀態(tài)和相互獨(dú)立的,服務(wù)器為了跟蹤用戶的狀態(tài)信息,便提供一種機(jī)制,使其可以識(shí)別在短時(shí)間內(nèi)多個(gè)不同的HTTP請(qǐng)求是同一個(gè)用戶發(fā)出的,從而提供更多個(gè)性化服務(wù)。這種機(jī)制,便是會(huì)話(Session)。
那么,服務(wù)器是如何識(shí)別這多個(gè)不同的HTTP請(qǐng)求是同一個(gè)用戶發(fā)出的呢?
通過用戶發(fā)送的HTTP請(qǐng)求信息中的一個(gè)令牌。這令牌,便是唯一會(huì)話標(biāo)識(shí)符(Session ID)。當(dāng)服務(wù)器第一次接收到用戶的HTTP請(qǐng)求時(shí),便給用戶發(fā)送這個(gè)唯一會(huì)話標(biāo)識(shí)符(Session ID),那么只要當(dāng)之后瀏覽器等客戶端每一次發(fā)送HTTP請(qǐng)求時(shí),帶上這個(gè)令牌,服務(wù)器便可以識(shí)別不同的HTTP請(qǐng)求是同一個(gè)用戶發(fā)出的。在瀏覽器等客戶端中,維護(hù)這令牌的,便是Cookies。
于是在實(shí)際爬蟲中,我們?nèi)绻行枰憧梢匀ゾS護(hù)Cookies,從而讓服務(wù)器能夠長(zhǎng)久地維護(hù)Session會(huì)話。
import requests # 導(dǎo)入工具包
s = requests.Session() # 創(chuàng)建一個(gè) Session 對(duì)象
s.get('https://httpbin.org/get') # 發(fā)送 GET 請(qǐng)求
s.cookies.set('key','value') # 設(shè)置 Cookies 參數(shù)
s.headers.update({'User-Agent':'Mozilla/5.0'}) # 設(shè)置headers參數(shù),自定義請(qǐng)求頭
s = requests.Session(),這里用requests.Session()方法構(gòu)建一個(gè)會(huì)話對(duì)象,并將其賦值給s。s.get('https://httpbin.org/get'),值得注意的是,該會(huì)話對(duì)象s的類型是requests.sessions.Session 類型對(duì)象,該類型對(duì)象可以像 requests.models.Response 類型對(duì)象一樣發(fā)送各類諸如GET、POST類型的HTTP請(qǐng)求。s.cookies.set('key','value'),該語句通過使用cookies參數(shù)來設(shè)置cookiess.headers.update({'User-Agent':'Mozilla/5.0'}),該代碼使用headers參數(shù)設(shè)置 headers,其中不僅可以包括User-Agent客戶端類型表示,還可以包括Accept客戶端可接受內(nèi)容類型、Authorization身份驗(yàn)證信息等
到此這篇關(guān)于Python使用requests庫發(fā)送請(qǐng)求的示例代碼的文章就介紹到這了,更多相關(guān)Python requests發(fā)送請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python新手學(xué)習(xí)可變和不可變對(duì)象
在本篇文章里小編給大家分享了是一篇關(guān)于python可變對(duì)象和不可變對(duì)象的基礎(chǔ)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考下。2020-06-06
python多繼承(鉆石繼承)問題和解決方法簡(jiǎn)單示例
這篇文章主要介紹了python多繼承(鉆石繼承)問題和解決方法,結(jié)合實(shí)例形式分析了Python多繼承調(diào)用父類初始化方法相關(guān)操作技巧,需要的朋友可以參考下2019-10-10
Python內(nèi)存泄漏和內(nèi)存溢出的解決方案
這篇文章主要介紹了Python內(nèi)存泄漏和內(nèi)存溢出的解決方案,幫助大家維護(hù)后臺(tái)進(jìn)程,感興趣的朋友可以了解下2020-09-09
使用Pandas實(shí)現(xiàn)清洗客戶編碼異常數(shù)據(jù)
在不同行業(yè)中,我們經(jīng)常會(huì)遇到一個(gè)麻煩的問題:數(shù)據(jù)清洗,尤其是當(dāng)我們需要處理客戶編碼異常數(shù)據(jù)時(shí),下面小編就來和大家分享一下常用的解決辦法吧2023-07-07
Python項(xiàng)目進(jìn)行加密打包的實(shí)踐指南
在實(shí)際開發(fā)中,我們有時(shí)需要將 Python 項(xiàng)目交付給客戶或部署到不受控環(huán)境中,但又不希望源代碼被輕易查看甚至篡改,所以本文將基于一個(gè)自研的 Encryptor 工具類,分享如何實(shí)現(xiàn)一個(gè)輕量級(jí)、可擴(kuò)展的 Python 項(xiàng)目加密打包方案,需要的朋友可以參考下2026-01-01
Python異常原理及異常捕捉實(shí)現(xiàn)過程解析
這篇文章主要介紹了Python異常原理及異常捕捉實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03

