使用urllib.request库获取cookie登录
使用urllib.request庫獲取cookie登錄
- 一 、使用手動添加cookie的方式來獲取頁面
- 二、使用 cookiejar 自動獲取登錄后獲得的cookie
一 、使用手動添加cookie的方式來獲取頁面
要獲取的是頁面 xxx.com/member/ 的內容,這個頁面是在登錄之后跳轉到一個新的頁面才得到。
用爬蟲爬取頁面A的內容時,所需要的cookie是在請求頁面A時請求頭【Request Headers】里面的cookie,用瀏覽器進行抓包時,如果頁面A是從其他頁面跳轉過來的,可以將頁面A進行刷新操作進行抓包
上圖就是 member 頁面進行抓包時獲取的請求頭里面的內容。請求頭里面的cookie就是登陸 member 頁面所需要的憑證,將該cookie添加到下面代碼中就可以抓取 member 頁面的內容。
import urllib.request url="http://www.yaozh.com/member/" headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36","Cookie":"http://www.yaozh.com/member/這個頁面請求頭里面的cookie" } #創建請求對象,改變請求頭 request=urllib.request.Request(url,headers=headers) #請求消息 response=urllib.request.urlopen(request) data=response.read() with open("cookie.html","wb") as f:f.write(data)二、使用 cookiejar 自動獲取登錄后獲得的cookie
""" 獲取個人中心的頁面 1.代碼登錄 登錄成功 cookie(有效) 2.自動帶著cookie去請求個人中心 cookiejar自動保存cookie """ import urllib.request from http import cookiejar import urllib.parse# 添加cookie也要有cookie的處理器 # get:返回登錄頁面 # post:返回登錄后的結果,賬戶已經登錄進去了的頁面# 1.代碼登錄# 1.1 登錄的網址 login_url="https://www.yaozh.com/login"# 1.2 登錄的參數 # Form Data login_form_data={"username":"dong123456","pwd":"******","formhash":"892EF2A017","backurl":"https%253A%252F%252Fwww.yaozh.com%252F"} # 使用urllib.request時 post方法所攜帶的參數不能是字典形式 login_form_data_final=urllib.parse.urlencode(login_form_data)# 1.3 發送登錄請求POST,#自動保存cookie cook_jar=cookiejar.CookieJar()# 定義有添加 cookie功能的處理器 cook_handler=urllib.request.HTTPCookieProcessor(cook_jar)# 根據處理器生成opener opener=urllib.request.build_opener(cook_handler)# 帶著參數發送post請求,制作請求對象# 添加請求頭 headers={"Users-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}# 此時headers里面還沒有cookie,還沒有登錄 login_request=urllib.request.Request(login_url,headers=headers,data=login_form_data_final.encode("utf-8"))# 如果登錄成功。cookjar自動保存cookie,opener里面有cookjar,所以opener里有cookie#下面一步不需要返回數據,只要成功登陸就行 opener.open(login_request)# 2.代碼帶著cookie去訪問 個人中心 center_url="http://www.yaozh.com/member/" center_request=urllib.request.Request(center_url,headers=headers) response=opener.open(center_url) data=response.read()with open("cookie_02.html","wb") as f:f.write(data)在用賬號、密碼登錄一個網站時,請求頭里面會帶著一些cookie文件去登錄,這些cookie是儲存在本地文件中的。登錄成功之后,response里面會返回 set-cookie ,這是服務器端返回給用戶端的 cookie 值,在之后訪問網站中的其他頁面時,請求就會帶著 set-cookie 中的 cookie 和部分登錄之前就存儲在本地文件中的 cookie 去訪問。
在本例中,通過 print(cookiejar.CookieJar())可以得到訪問個人中心頁面時請求頭里面的cookie,這些 cookie 是訪問時必須的
<CookieJar[<Cookie yaozh_jobstatus=kptta67UcJieW6zKnFSe2JyXnoaZbptol5qHnKZxanJT1qeSoMZYoNdzaJFyVMfU0MiVlpRrmmuHn9ibbHFXpJLUrZCnyqPKhnSqm2linYeCd2fa6F156Ed37412961242582d23A81Tlp2ZmWqbbp6Uh5ymcWlyU9WinpiDcdieamqbWmOYnpeZl5yUbZtnmJiHnLA%3Dc017bd785645e38f852dcb7111ff54ae for .yaozh.com/>, <Cookie yaozh_logintime=1595838366 for .yaozh.com/>, <Cookie yaozh_user=876326%09dong123456 for .yaozh.com/>, <Cookie yaozh_userId=876326 for .yaozh.com/>, <Cookie PHPSESSID=v34tinlllfv5ap3ku6aqju8p62 for www.yaozh.com/>, <Cookie acw_tc=2f624a7615958383660296581e5bfb406b61c57cdcd52602c8ae1f584de09b for www.yaozh.com/>]>這6個必須的 cookie 由以下兩部分組成
在請求[http://www.yaozh.com/member/]這個頁面時,通過抓包所得到的的cookie不止6個,但是都包含了通過cookiejar所存儲的cookie
總結
以上是生活随笔為你收集整理的使用urllib.request库获取cookie登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信公众号怎么集赞服务器,【微信点赞】_
- 下一篇: 基于实时计算(flink)打造舆情分析平