Cookie 是指某些網站服務器為了辨別用戶身份和進行Session跟蹤,而儲存在用戶瀏覽器上的文本檔案,Cookie可以保持登錄資訊到用戶下次與服務器的會話,

HTTP是無狀態的面向連接的協議, 為了保持連接狀態, 引入了Cookie機制,Cookie是http訊息頭中的一種屬性,包括:
Cookie名字(Name)
Cookie的值(Value)
Cookie的過期時間(Expires/Max-Age)
Cookie作用路徑(Path)
Cookie所在域名(Domain),
使用Cookie進行安全連接(Secure),
前兩個引數是Cookie應用的必要條件,另外,還包括Cookie大小(Size,不同瀏覽器對Cookie個數及大小限制是有差異的),另外注意:光理論是不夠的,這里順便免費送大家一套2020最新python入門到高級專案實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流討教!
Cookie由變數名和值組成,根據 Netscape公司的規定,Cookie格式如下:
Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
Cookie應用
Cookies在爬蟲方面最典型的應用是判定注冊用戶是否已經登錄網站,用戶可能會得到提示,是否在下一次進入此網站時保留用戶資訊以便簡化登錄手續,
import urllib.request
# 1. 構建一個已經登錄過的用戶的headers資訊
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/73.0.3683.103 Safari/537.36",
"Cookie": "anonymid=jurpmxe9-orl7u3;"
"depovince=BJ;"
" _r01_=1; "
"JSESSIONID=abcwYLyIY7VNIhCDVWcPw;"
" jebe_key=f6fb270b-d06d-42e6-8b53-e67c3156aa7e%7Cc13c37f53bca9e1e7132d4b58ce00fa3%7C148406060
7478%7C1%7C1484060607173;"
" jebecookies=f1fd29c4-bd08-4d66-8834-72e42b70d2cb|||||; "
"ick_login=0f790ea2-c8bf-4d64-a394-36745febeb26;"
" _de=622DE758381206EB340E4CEC836F3769696BF75400CE19CC;"
" p=7e50f3fe10ca320e36dae001c72d392d3;"
" ap=327550029;"
" first_login_flag=1;"
" [email protected];"
" ln_hurl=http://hdn.xnimg.cn/photos/hdn121/20120930/2035/h_main_hcDy_40fc000002d91375.jpg;"
" t=d7c6ae064b81ae15f5b91f5897dc61553;"
" societyguester=d7c6ae064b81ae15f5b91f5897dc61553;"
" id=485439163;"
" xnsid=bc995dc8;"
" ver=7.0;"
" loginfrom=null"
}
# 2. 通過headers里的報頭資訊(主要是Cookie資訊),構建Request物件
request = urllib.request.Request("http://www.renren.com", headers=headers)
# 3. 直接訪問renren主頁,服務器會根據headers報頭資訊(主要是Cookie資訊),判斷這是一個已經登錄的用戶,并回傳相應的頁面
response = urllib.request.urlopen(request)
# 4. 列印回應內容
print(response.read().decode("utf-8"))
但是這樣做太過復雜,我們先需要在瀏覽器登錄賬戶,并且設定保存密碼,并且通過抓包才能獲取這個Cookie,那有么有更簡單方便的方法呢?
相關推薦:《Python相關教程》
cookielib庫 和 HTTPCookieProcessor處理器
在Python處理Cookie,一般是通過 http 模塊的 cookiejar 模塊和 urllib 模塊的 HTTPCookieProcessor 處理器類一起使用,
cookiejar模塊:主要作用是提供用于存盤cookie的物件,
HTTPCookieProcessor處理器:主要作用是處理這些cookie物件,并構建handler物件,
import urllib.request
import urllib.parse
from http import cookiejar
# 1. 構建一個CookieJar物件實體來保存cookie
cookie = cookiejar.CookieJar()
# 2. 使用HTTPCookieProcessor()來創建cookie處理器物件,引數為CookieJar()物件
cookie_handler = urllib.request.HTTPCookieProcessor(cookie)
# 3. 通過 build_opener() 來構建opener
opener = urllib.request.build_opener(cookie_handler)
# 4. addheaders 接受一個串列,里面每個元素都是一個headers資訊的元祖, opener將附帶headers資訊
opener.addheaders = [("User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/73.0.3683.103 Safari/537.36")]
# 5. 需要登錄的賬戶和密碼
data = {"email": "[email protected]", "password": "chen562352353"}
# 6. 通過urlencode()轉碼
postdata = urllib.parse.urlencode(data).encode("utf-8")
# 7. 構建Request請求物件,包含需要發送的用戶名和密碼
request = urllib.request.Request("http://www.renren.com/PLogin.do", data=https://www.cnblogs.com/chengxuyuanaa/p/postdata)
# 8. 通過opener發送這個請求,并獲取登錄后的Cookie值,
opener.open(request)
# 9. opener包含用戶登錄后的Cookie值,可以直接訪問那些登錄后才可以訪問的頁面
response = opener.open("http://www.renren.com/485439163")
# 10. 列印回應內容
print(response.read().decode("utf-8"))
模擬登錄要注意幾點:
登錄一般都會先有一個HTTP GET,用于拉取一些資訊及獲得Cookie,然后再HTTP POST登錄,
HTTP POST登錄的鏈接有可能是動態的,從GET回傳的資訊中獲取,
password 有些是明文發送,有些是加密后發送,有些網站甚至采用動態加密的,同時包括了很多其他資料的加密資訊,只能通過查看JS原始碼獲得加密演算法,再去破解加密,非常困難,
大多數網站的登錄整體流程是類似的,可能有些細節不一樣,所以不能保證其他網站登錄成功,
最后注意:光理論是不夠的,這里順便免費送大家一套2020最新python入門到高級專案實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流討教!
本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/141171.html
標籤:Python
上一篇:監督學習與sklearn庫
