Python中requests.session()的用法小結(jié)
可能大家對(duì) session 已經(jīng)比較熟悉了,也大概了解了session的機(jī)制和原理,但是我們?cè)谧雠老x(chóng)時(shí)如何會(huì)運(yùn)用到session呢,就是接下來(lái)要講到的會(huì)話(huà)保持。
首先說(shuō)一下,為什么要進(jìn)行會(huì)話(huà)保持的操作?
session定義
requests庫(kù)的session會(huì)話(huà)對(duì)象可以跨請(qǐng)求保持某些參數(shù),說(shuō)白了,就是比如你使用session成功的登錄了某個(gè)網(wǎng)站,則在再次使用該session對(duì)象請(qǐng)求該網(wǎng)站的其他網(wǎng)頁(yè)都會(huì)默認(rèn)使用該session之前使用的cookie等參數(shù)。
尤其是在保持登陸狀態(tài)時(shí)運(yùn)用的最多,在某些網(wǎng)站抓取,或者app抓取時(shí),有時(shí)強(qiáng)制登陸,有的是不登陸返回的數(shù)據(jù)就是假的或者說(shuō)是不完整的數(shù)據(jù),那我們不可能去做到每一次請(qǐng)求都要去登陸一下怎么辦,就需要用到保持會(huì)話(huà)的功能了,我們可以只登陸一次,然后保持這種狀態(tài)去做其他的或者更多的請(qǐng)求。
其次,我們?cè)撊绾问褂脮?huì)話(huà)保持?舉一個(gè)事例來(lái)說(shuō)明一下:
session使用實(shí)例
http協(xié)議本身是無(wú)狀態(tài)的,為了讓請(qǐng)求之間保持狀態(tài),有了session和cookie機(jī)制。 requests 也提供了相應(yīng)的方法去操縱它們。
requests中的session對(duì)象能夠讓我們跨http請(qǐng)求保持某些參數(shù),即讓同一個(gè)session對(duì)象發(fā)送的請(qǐng)求頭攜帶某個(gè)指定的參數(shù)。當(dāng)然,最常見(jiàn)的應(yīng)用是它可以讓cookie保持在后續(xù)的一串請(qǐng)求中。
下面,通過(guò)官方文檔中的示例來(lái)了解如何使用它。
import requests
s = requests.session()
# 第一步:發(fā)送一個(gè)請(qǐng)求,用于設(shè)置請(qǐng)求中的cookies
r1 = s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
print(r1.text)
# 第二步:再發(fā)送一個(gè)請(qǐng)求,用于查看當(dāng)前請(qǐng)求中的cookies
r2 = s.get("http://httpbin.org/cookies")
print(r2.text)運(yùn)行結(jié)果
{
"cookies": {
"sessioncookie": "123456789"
}
}{
"cookies": {
"sessioncookie": "123456789"
}
}
從結(jié)果中我們可以看出,第二次請(qǐng)求已經(jīng)攜帶上了第一次請(qǐng)求所設(shè)置的cookie,即通過(guò)session達(dá)到了保持cookie的目的。示例中創(chuàng)建了一個(gè)requests.Session()對(duì)象,通過(guò)該對(duì)象來(lái)進(jìn)行http請(qǐng)求操作,該操作基本類(lèi)似于requests.request()
由于session讓請(qǐng)求之間具有了連貫性,那么,就有了跨請(qǐng)求參數(shù)和非跨請(qǐng)求參數(shù)的區(qū)別。即有時(shí)我想讓所有請(qǐng)求均帶有某個(gè)參數(shù),而有時(shí)我只是想讓單獨(dú)的一條請(qǐng)求帶上臨時(shí)的參數(shù)。通過(guò)下面的例子來(lái)了解如何使用。
import requests
s = requests.Session()
s.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
r1 = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r1.text)
# 'x-test' is sent
r2 = s.get('http://httpbin.org/headers')
print(r2.text)運(yùn)行結(jié)果
# r1.text
{
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5e91656f-b99f14a4d6f47f9e55a90bb4",
"X-Test": "true",
"X-Test2": "true"
}
}
# r2.text
{
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5e91656f-e9741db4c2ca2fd6e0628396",
"X-Test": "true"
}
}
從結(jié)果中我們可以得出兩條結(jié)論:
session可以為請(qǐng)求方法提供缺省數(shù)據(jù),比如第一次請(qǐng)求中的{‘x-test’: ‘true’}就是缺省數(shù)據(jù),此時(shí)的缺省數(shù)據(jù)就是跨請(qǐng)求參數(shù)。
方法級(jí)別的參數(shù)不會(huì)被跨請(qǐng)求保持,比如第二次請(qǐng)求時(shí),沒(méi)有攜帶headers={‘x-test2’: ‘true’},返回的結(jié)果中也沒(méi)有{‘x-test2’: ‘true’},說(shuō)明該參數(shù)沒(méi)有在第一次請(qǐng)求后被保持住。
另外說(shuō)一點(diǎn)單獨(dú)處理cookie字段,處理為字典格式
# 處理cookie內(nèi)容為字典
cookie = "SINAGLOBAL=821034395211.0111.1522571861723; wb_cmtLike_1850586643=1; un=tyz950829@sina.com; wb_timefeed_1850586643=1; UOR=,,login.sina.com.cn; wvr=6; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WWsNeq71O_sXkkXNnXFHgOW5JpX5KMhUgL.Fo2RSK5f1hqcShe2dJLoI0qLxK-L12qLB-zLxKqL1hnL1K2LxK-LBo5L12qLxKqL1hML1KzLxKnL1K.LB-zLxK-L1K-LBKqt; YF-V5-G0=c99031715427fe982b79bf287ae448f6; ALF=1556795806; SSOLoginState=1525259808; SCF=AqTMLFzIuDI5ZEtJyAEXb31pv1hhUdGUCp2GoKYvOW0LQTInAItM-ENbxHRAnnRUIq_MR9afV8hMc7c-yVn2jI0.; SUB=_2A2537e5wDeRhGedG7lIU-CjKzz-IHXVUm1i4rDV8PUNbmtBeLVrskW9NUT1fPIUQGDKLrepaNzTEZxZHOstjoLOu; SUHB=0IIUWsCH8go6vb; _s_tentry=-; Apache=921830614666.5322.1525261512883; ULV=1525261512916:139:10:27:921830614666.5322.1525261512883:1525239937212; YF-Page-G0=b5853766541bcc934acef7f6116c26d1"
cookie_dict = {i.split("=")[0]: i.split("=")[1] for i in cookie.split("; ")}參考文獻(xiàn)
https://cloud.tencent.com/developer/article/1739949
https://blog.csdn.net/weixin_42575020/article/details/95179840
到此這篇關(guān)于Python中requests.session()的用法小結(jié)的文章就介紹到這了,更多相關(guān)python requests.session內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python網(wǎng)頁(yè)請(qǐng)求urllib2模塊簡(jiǎn)單封裝代碼
這篇文章主要分享一個(gè)python網(wǎng)頁(yè)請(qǐng)求模塊urllib2模塊的簡(jiǎn)單封裝代碼,有需要的朋友參考下2014-02-02
Python實(shí)現(xiàn)把utf-8格式的文件轉(zhuǎn)換成gbk格式的文件
這篇文章主要介紹了Python實(shí)現(xiàn)把utf-8格式的文件轉(zhuǎn)換成gbk格式的文件,本文給出了實(shí)現(xiàn)代碼并同時(shí)剖析了代碼的作用,需要的朋友可以參考下2015-01-01
Django 數(shù)據(jù)庫(kù)同步操作技巧詳解
這篇文章主要介紹了Django 數(shù)據(jù)庫(kù)同步操作技巧詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
python編程進(jìn)階之異常處理用法實(shí)例分析
這篇文章主要介紹了python編程進(jìn)階之異常處理用法,結(jié)合實(shí)例形式分析了python異常捕獲、處理相關(guān)語(yǔ)句、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
Python數(shù)據(jù)可視化的五種方法小結(jié)
大家好,在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,數(shù)據(jù)可視化是挖掘數(shù)據(jù)價(jià)值的重要一環(huán),本文將介紹五種極為實(shí)用的高級(jí)可視化圖表,從原理到代碼實(shí)現(xiàn),一站式助力繪制數(shù)據(jù)圖,需要的朋友可以參考下2025-04-04
Keras: model實(shí)現(xiàn)固定部分layer,訓(xùn)練部分layer操作
這篇文章主要介紹了Keras: model實(shí)現(xiàn)固定部分layer,訓(xùn)練部分layer操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python實(shí)戰(zhàn)整活之聊天機(jī)器人
這篇文章主要介紹了Python實(shí)戰(zhàn)整活之聊天機(jī)器人,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細(xì)教程)
這篇文章主要介紹了Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細(xì)教程),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09

