Python爬蟲實(shí)現(xiàn)Cookie模擬登錄
0.模擬登錄原理
模擬登錄,一般是網(wǎng)站在瀏覽器中使用POST請(qǐng)求向后端發(fā)送數(shù)據(jù)請(qǐng)求的過程,響應(yīng)后的數(shù)據(jù)一般會(huì)設(shè)置相關(guān)的Session與Cookie標(biāo)識(shí)用戶的登錄標(biāo)識(shí)。對(duì)于前后端分離的項(xiàng)目中,也有可能是加密密鑰的token,例如 ,jwt 登錄的方式的 token 一般包含時(shí)效性,當(dāng)然cookie 也具備時(shí)效性。但是在登錄請(qǐng)求的請(qǐng)求頭并不用包含,因?yàn)檫@些都是登錄后的返回結(jié)果的信息,務(wù)必注意區(qū)分。
1、Cookie模擬登錄
現(xiàn)在很多網(wǎng)站需要用戶成功登錄后才可以查看相關(guān)內(nèi)容。使用Cookie 模擬登錄可以很好地解決這種問題。
Cookie 是指某些網(wǎng)站服務(wù)器為了辨別用戶身份和進(jìn)行Session跟蹤,而儲(chǔ)存在用戶瀏覽器上的文本文件,Cookie是一個(gè)記錄了用戶登錄狀態(tài)以及用戶屬性的加密字符串,Cookie可以保持登錄信息到用戶下次與服務(wù)器的會(huì)話。Cookie 以鍵 / 值對(duì)形式存儲(chǔ)。
Cookie 驗(yàn)證流程:當(dāng)用戶第一次登陸網(wǎng)站時(shí),服務(wù)端會(huì)在返回的響應(yīng)頭 Response Headers 中添加 Cookie數(shù)據(jù), 瀏覽器接收到響應(yīng)頭的信息后,會(huì)將 Cookie 保存至瀏覽器本地存儲(chǔ)中,當(dāng)用戶再次向該網(wǎng)站發(fā)送請(qǐng)求時(shí),請(qǐng)求頭中就會(huì)攜帶 Cookie,這樣服務(wù)器通過讀取 Cookie 就能識(shí)別登陸用戶了。
Cookie在爬蟲方面最典型的應(yīng)用是判定注冊(cè)用戶是否已經(jīng)登錄網(wǎng)站,用戶在請(qǐng)求參數(shù)中傳入Cookie,在發(fā)送請(qǐng)求訪問url時(shí),會(huì)跳過登錄界面,跳過登錄驗(yàn)證流程,從而直接訪問到想要的網(wǎng)站數(shù)據(jù)。
Cookie 模擬登錄使用實(shí)例:
注冊(cè)一個(gè)微博賬號(hào),登錄微博并進(jìn)入個(gè)人主頁(yè),使用F12打開瀏覽器的調(diào)試工具,在 Headers 選項(xiàng)中找到請(qǐng)求頭Request Headers 中的 Cookie 信息,復(fù)制保存。
import urllib.request
import urllib.parse
url = 'https://weibo.com/u/6768120693/home'
#請(qǐng)求頭參數(shù)
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處理器可以定制更高級(jí)的請(qǐng)求頭,基本的urlopen()方法不支持代理、動(dòng)態(tài)cookie等其他的HTTP/HTTPS高級(jí)功能。
Handler處理器使用步驟:
- 使用Handler處理器(如HTTPHandler或HTTPSHandler)來創(chuàng)建特定功能的處理器對(duì)象;
- 然后通過urllib.request.build_opener()方法使用處理器,構(gòu)建opener對(duì)象;
- 使用構(gòu)建的opener對(duì)象,調(diào)用open()方法發(fā)送請(qǐng)求。
使用實(shí)例:
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處理器對(duì)象
http_handler = urllib.request.HTTPHandler()
#獲取HTTPSHandler處理器對(duì)象
https_handler = urllib.request.HTTPSHandler()
#2、構(gòu)建opener對(duì)象
http_opener = urllib.request.build_opener(http_handler)
https_opener = urllib.request.build_opener(https_handler)
#定制請(qǐng)求
request = urllib.request.Request(url=url,headers=headers)
#3、調(diào)用open方法發(fā)送請(qǐng)求
http_response = http_opener.open(request)
https_response = https_opener.open(request)
print(http_response)
print(https_response)
執(zhí)行結(jié)果:
<http.client.HTTPResponse object at 0x000002220510A470>
<http.client.HTTPResponse object at 0x0000022205116CC0>
到此這篇關(guān)于Python爬蟲實(shí)現(xiàn)Cookie模擬登錄的文章就介紹到這了,更多相關(guān)Python爬蟲模擬登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 如何使用python爬蟲爬取要登陸的網(wǎng)站
- Python爬蟲利用cookie實(shí)現(xiàn)模擬登陸實(shí)例詳解
- Python 爬蟲模擬登陸知乎
- Python使用Srapy框架爬蟲模擬登陸并抓取知乎內(nèi)容
- python模擬新浪微博登陸功能(新浪微博爬蟲)
- python爬蟲之驗(yàn)證碼篇3-滑動(dòng)驗(yàn)證碼識(shí)別技術(shù)
- python爬蟲之自動(dòng)登錄與驗(yàn)證碼識(shí)別
- Python爬蟲模擬登錄帶驗(yàn)證碼網(wǎng)站
- Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點(diǎn)選驗(yàn)證碼功能
相關(guān)文章
Python如何把Spark數(shù)據(jù)寫入ElasticSearch
這篇文章主要介紹了Python如何把Spark數(shù)據(jù)寫入ElasticSearch,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Pycharm中flask開啟debug模式的詳細(xì)流程
PyCharm是一個(gè)強(qiáng)大的集成開發(fā)環(huán)境(IDE),非常適合Python開發(fā)者,包括Flask框架,當(dāng)你在使用Flask開發(fā)Web應(yīng)用時(shí),Debug功能是非常重要的,它允許你在運(yùn)行時(shí)檢查程序的狀態(tài)、調(diào)試代碼錯(cuò)誤,本文將介紹Pycharm中flask開啟debug模式的詳細(xì)流程,需要的朋友可以參考下2024-08-08
python內(nèi)置進(jìn)制轉(zhuǎn)換函數(shù)的操作
這篇文章主要介紹了python內(nèi)置進(jìn)制轉(zhuǎn)換函數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Python opencv醫(yī)學(xué)處理的實(shí)現(xiàn)過程
這篇文章主要介紹了Python opencv醫(yī)學(xué)處理的實(shí)現(xiàn)過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05

