更新時(shí)間:2023-05-22 來源:黑馬程序員 瀏覽量:
當(dāng)用戶首次登錄一個(gè)網(wǎng)站時(shí),網(wǎng)站往往會(huì)要求用戶輸入用戶名和密碼,并且給出自動(dòng)登錄選項(xiàng)供用戶勾選。用戶如果勾選了自動(dòng)登錄選項(xiàng),那么在下一次訪問該網(wǎng)站時(shí),不用輸入用戶名和密碼便可以登錄,這是因?yàn)榈谝淮蔚卿洉r(shí)服務(wù)器發(fā)送了包含登錄憑證的Cookie到用戶硬盤上,第二次登錄時(shí)瀏覽器發(fā)送了Cookie,服務(wù)器驗(yàn)證Cookie后就識(shí)別了用戶的身份,用戶便無須輸入用戶名和密碼。
Cookie(有時(shí)也用其復(fù)數(shù)形式Cookies)是指某些網(wǎng)站為了辨別用戶身份、進(jìn)行會(huì)話跟蹤,而暫時(shí)存儲(chǔ)在客戶端的一段文本數(shù)據(jù)(通常經(jīng)過加密)。
在Requests庫中,發(fā)送請求時(shí)可以通過兩種方式攜帶Cookie,一種方式是直接將包含Cookie信息的請求頭傳入請求函數(shù)的headers參數(shù);另一種方式是將Cookie信息傳入請求函數(shù)的cookies參數(shù)。不過,cookies參數(shù)需要接收一個(gè)RequestsCookieJar類的對象,該對象類似于一個(gè)字典,會(huì)以名稱(Name)與值(Value)的形式存儲(chǔ)Cookie。
下面以登錄后的百度首頁為例,分別通過上述兩種方式演示如何使用Requests實(shí)現(xiàn)Cookie登錄。
第1種方式的實(shí)現(xiàn)代碼如下:
import requests headers = { 'cookie':‘此處填寫登錄百度網(wǎng)站后查看的Cookie信息’,設(shè)置字段Cookie 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4)' 'ApplewebKit/537.36 (KHTML, like Gecko)' 'Chrome/53.0.2785.116 Safari/537.36',}€設(shè)置字段User-Agent response = requests.get('https://www.baidu.com/', headers=headers) print(response.tgkt)
第2種方式的實(shí)現(xiàn)代碼如下:
import requests header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) ' 'AppleWebKit/537.36 (KHTML,1ike Gecko)' 'Chrome/53.0.2785.116 Safari/537.36'} # 準(zhǔn)備Cookie cookie='此處填寫登錄百度網(wǎng)站后查看的cookie信息' # 創(chuàng)建RequestsCookieJar類的對象 jar_obj = requests.cookies.RequestsCookieJar() # 以逗號(hào)為分隔符分隔Cookie.并將獲得的鍵和值保存至jar_obj中 for temp in cookie.split(';'): key, value = temp.split('=', 1) jar_obj.set(key, value) response = requests.get('https://www.baidu.com/', headers=header, cookies=jar_obj) print (response,text)
上述兩段代碼的運(yùn)行結(jié)果如下。
······ "userAttr":Number("")|| 0, "username":"Itcast_001122", "unametype":"2", "userIsSkined":"off", "userIsNewSkined":"off", "userSkinName":"", "userSkinOpacity":"70", ······
由加粗部分的代碼可以看出,程序輸出的網(wǎng)頁源代碼包含了用戶名Itcast_001122。這說明我們成功地訪問了登錄后的百度首頁。