Python爬蟲實現Cookie模擬登錄
0.模擬登錄原理
模擬登錄,一般是網站在瀏覽器中使用POST請求向后端發(fā)送數據請求的過程,響應后的數據一般會設置相關的Session與Cookie標識用戶的登錄標識。對于前后端分離的項目中,也有可能是加密密鑰的token,例如 ,jwt 登錄的方式的 token 一般包含時效性,當然cookie 也具備時效性。但是在登錄請求的請求頭并不用包含,因為這些都是登錄后的返回結果的信息,務必注意區(qū)分。
1、Cookie模擬登錄
現在很多網站需要用戶成功登錄后才可以查看相關內容。使用Cookie 模擬登錄可以很好地解決這種問題。
Cookie 是指某些網站服務器為了辨別用戶身份和進行Session跟蹤,而儲存在用戶瀏覽器上的文本文件,Cookie是一個記錄了用戶登錄狀態(tài)以及用戶屬性的加密字符串,Cookie可以保持登錄信息到用戶下次與服務器的會話。Cookie 以鍵 / 值對形式存儲。
Cookie 驗證流程:當用戶第一次登陸網站時,服務端會在返回的響應頭 Response Headers 中添加 Cookie數據, 瀏覽器接收到響應頭的信息后,會將 Cookie 保存至瀏覽器本地存儲中,當用戶再次向該網站發(fā)送請求時,請求頭中就會攜帶 Cookie,這樣服務器通過讀取 Cookie 就能識別登陸用戶了。
Cookie在爬蟲方面最典型的應用是判定注冊用戶是否已經登錄網站,用戶在請求參數中傳入Cookie,在發(fā)送請求訪問url時,會跳過登錄界面,跳過登錄驗證流程,從而直接訪問到想要的網站數據。
Cookie 模擬登錄使用實例:
注冊一個微博賬號,登錄微博并進入個人主頁,使用F12打開瀏覽器的調試工具,在 Headers 選項中找到請求頭Request Headers 中的 Cookie 信息,復制保存。
import urllib.request import urllib.parse url = 'https://weibo.com/u/6768120693/home' #請求頭參數 headers = { 'cookie': 'UPSTREAM-V-WEIBO-COM=35846f552801987f8c1e8f7cec0e2230; _s_tentry=passport.weibo.com; Apache=3550042880907.0825.1657677410065; SINAGLOBAL=3550042880907.0825.1657677410065; ULV=1657677410241:1:1:1:3550042880907.0825.1657677410065:; XSRF-TOKEN=wpUjXoB3U_T8KzDcYBGeQmeg; WBPSESS=dg5zs_KFY81p0FnDKmb34Ti2iJGu9QxJdhMzG8ikVBN-CyoFvr-FTOapET7oPxP0FTRcDR-4ospowpRpkqiE8Gga-FNf9Bekers3TFYG5vxMEBfXahOBmCiJK7XwTPB_GaeInt3uz0W9CfgA545n9SWoyDpY910MV0NogSygO48=; PC_TOKEN=fd99713024; login_sid_t=6d987092eac2182f810741424691738b; cross_origin_proto=SSL; WBStorage=4d96c54e|undefined; wb_view_log=1920*10801; SUB=_2A25Py7HwDeRhGeBJ7VoQ8i7Kwj-IHXVsoKQ4rDV8PUNbmtAKLVPNkW9NRi9nZzdxPj2ym6xf8i-dSCWgSnyp4GVC; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5e8Y.xknmxKI8AQq4L07-c5JpX5KzhUgL.FoqNSonpeo5c1Ke2dJLoI0.LxKqL1h5L1KzLxKqL1KqLBK-LxKqL1hnL1K2LxKML1-2L1hBLxK-L1K5L12BLxK-LB-BL1KUT-27t; ALF=1689318688; SSOLoginState=1657782688; wvr=6; wb_view_log_6768120693=1920*10801; webim_unReadCount=%7B%22time%22%3A1657782816028%2C%22dm_pub_total%22%3A0%2C%22chat_group_client%22%3A0%2C%22chat_group_notice%22%3A0%2C%22allcountNum%22%3A40%2C%22msgbox%22%3A0%7D', 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.5261 SLBChan/10' } request = urllib.request.Request(url=url,headers=headers) response = urllib.request.urlopen(request) content = response.read().decode('utf-8') with open('weibo.html','w',encoding='utf-8') as file: file.write(content)
2、Handler處理器
Handler處理器可以定制更高級的請求頭,基本的urlopen()方法不支持代理、動態(tài)cookie等其他的HTTP/HTTPS高級功能。
Handler處理器使用步驟:
- 使用Handler處理器(如HTTPHandler或HTTPSHandler)來創(chuàng)建特定功能的處理器對象;
- 然后通過urllib.request.build_opener()方法使用處理器,構建opener對象;
- 使用構建的opener對象,調用open()方法發(fā)送請求。
使用實例:
import urllib.request url = 'http://www.baidu.com' headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.5261 SLBChan/10' } #1、獲取HTTPHandler處理器對象 http_handler = urllib.request.HTTPHandler() #獲取HTTPSHandler處理器對象 https_handler = urllib.request.HTTPSHandler() #2、構建opener對象 http_opener = urllib.request.build_opener(http_handler) https_opener = urllib.request.build_opener(https_handler) #定制請求 request = urllib.request.Request(url=url,headers=headers) #3、調用open方法發(fā)送請求 http_response = http_opener.open(request) https_response = https_opener.open(request) print(http_response) print(https_response)
執(zhí)行結果:
<http.client.HTTPResponse object at 0x000002220510A470>
<http.client.HTTPResponse object at 0x0000022205116CC0>
到此這篇關于Python爬蟲實現Cookie模擬登錄的文章就介紹到這了,更多相關Python爬蟲模擬登錄內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python3連接kafka模塊pykafka生產者簡單封裝代碼
今天小編就為大家分享一篇python3連接kafka模塊pykafka生產者簡單封裝代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12python dataframe astype 字段類型轉換方法
下面小編就為大家分享一篇python dataframe astype 字段類型轉換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04django將圖片保存到mysql數據庫并展示在前端頁面的實現
這篇文章主要介紹了django將圖片保存到mysql數據庫并展示在前端頁面的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05