cookies應(yīng)對python反爬蟲知識點詳解
在保持合理的數(shù)據(jù)采集上,使用python爬蟲也并不是一件壞事情,因為在信息的交流上加快了流通的頻率。今天小編為大家?guī)砹艘粋€稍微復(fù)雜一點的應(yīng)對反爬蟲的方法,那就是我們自己構(gòu)造cookies。在開始正式的構(gòu)造之前,我們先進(jìn)行簡單的分析如果不構(gòu)造cookies爬蟲時會出現(xiàn)的一些情況,相信這樣更能體會出cookies的作用。
網(wǎng)站需要cookies才能正常返回,但是該網(wǎng)站的cookies過期很快,我總不能用瀏覽器開發(fā)者工具獲取cookies,然后讓程序跑一會兒,每隔幾分鐘再手動獲取cookies,再讓程序繼續(xù)跑吧。如果反復(fù)這樣工作,那么寫爬蟲也就沒意義了。便開始對cookies進(jìn)行分析。
從瀏覽器的開發(fā)者工具獲取到的cookies大約有10個字段,經(jīng)過反復(fù)測試,能讓網(wǎng)站正常返回的只需要兩個字段,分別為__jsluid_h=011a522dbxxxxxxxxc1ce59d336e5e60和__jsl_clearance=1581880640.794|0|trTB4c6b%2BZpvxxxxxxxx8YqCOOo%3D (中間打碼處理)。
經(jīng)過測試,如果請求的時候不自己構(gòu)造cookies,默認(rèn)會返回__jsluid_h :

先嘗試了將那段js腳本保存下來,包裝成一個html文件打開,發(fā)現(xiàn)瀏覽器不停的刷新,也并沒起什么作用。那就分析一下js腳本,原來的代碼是單行的,自己整理一下并加了一些變量名和log,大概是這么個樣子:

將第16行的變量cmd打印出來看看,發(fā)現(xiàn)是另一段類似的腳本:

可以看到第二段腳本已經(jīng)開始設(shè)置cookies的__jsl_clearence 字段了。這些顯然就是混淆后的js腳本,但是分析到這里也就大概弄明白了從發(fā)送請求到網(wǎng)站返回是怎么回事。之所以在本地跑這段代碼會不斷刷新,是因為第二行的setTimeout會讓其在1.5秒后重新請求,但是我們本地沒有服務(wù)處理請求讓其停止,所以會不斷的刷新。
而第一段腳本當(dāng)中,變量y是完整的js代碼 ,代碼中的變量名和關(guān)鍵字被進(jìn)行編碼了,變量x存儲的是用來替換的變量名和關(guān)鍵字,后面是解碼函數(shù)。所以現(xiàn)在的問題變成了獲取第一段腳本當(dāng)中的cmd代碼,執(zhí)行后再獲取第二段代碼的document.cookie的內(nèi)容即可。
可是對于python和js的交互我完全沒接觸過,嘗試了PyExecJS和Js2Py,都沒辦法正常執(zhí)行第一段腳本。無奈之下,我用python復(fù)現(xiàn)了第一段腳本,然后用Js2Py獲取了cookie。在請求一次過后,構(gòu)造cookies,再請求一次,就可以了:
def test():
url = REQUEST_URL
# url = 'https://www.baidu.com'
request_header = get_header()
html = requests.get(url, headers=request_header)
print(html)
jscode = html.text
# print(jscode)
# tryjs.get_cookies()為復(fù)現(xiàn)的js代碼,以及用Js2Py獲取cookies的代碼
request_cookies = try_js.get_cookies(jscode)
request_cookies += ';__jsluid_h=' + html.cookies['__jsluid_h']
request_header['Cookie'] = request_cookies
print(request_header)
html = requests.get(url, headers=request_header, timeout=5)
print('new connection')
print(html)
print(html.text)
在經(jīng)歷重重的分析試驗后,我們終于得出以上的代碼成功實現(xiàn)了構(gòu)造cookies。相信經(jīng)過本篇的學(xué)習(xí),小伙伴們又多了一種解決爬蟲阻攔獲取數(shù)據(jù)的cookies辦法了,趕快行動起來吧。
到此這篇關(guān)于cookies應(yīng)對python反爬蟲知識點詳解的文章就介紹到這了,更多相關(guān)如何構(gòu)造cookies應(yīng)對python反爬蟲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python實現(xiàn)定時自動清除瀏覽器cookies的方法
- Python獲取瀏覽器Cookies的方法總結(jié)
- 詳解Python?Flask?API?示例演示(附cookies和session)
- Python?selenium?get_cookies獲取cookie不全的解決方案
- python 實現(xiàn)Requests發(fā)送帶cookies的請求
- python+selenium自動化實戰(zhàn)攜帶cookies模擬登陸微博
- Python爬蟲使用瀏覽器cookies:browsercookie過程解析
- python編程之requests在網(wǎng)絡(luò)請求中添加cookies參數(shù)方法詳解
- Python獲取瀏覽器Cookies的四種方式小結(jié)
相關(guān)文章
Python實現(xiàn)對大量表格文件數(shù)據(jù)處理的方法詳解
這篇文章主要為大家介紹了如何基于Python語言實現(xiàn)對大量表格文件加以數(shù)據(jù)截取、逐行求差、跨文件合并等處理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05
Python使用Flask Migrate模塊遷移數(shù)據(jù)庫
Flask-Migrate是一個為Flask應(yīng)用處理SQLAlchemy數(shù)據(jù)庫遷移的擴展,使得可以通過Flask的命令行接口或者Flask-Scripts對數(shù)據(jù)庫進(jìn)行操作2022-07-07
PyTorch環(huán)境中CUDA版本沖突問題排查與解決方案
在使用 PyTorch 進(jìn)行深度學(xué)習(xí)開發(fā)時,CUDA 版本兼容性問題是個老生常談的話題,本文將通過一次真實的排查過程,剖析 PyTorch 虛擬環(huán)境自帶 CUDA 運行時庫與系統(tǒng)全局 CUDA 環(huán)境沖突的場景,需要的朋友可以參考下2025-02-02
Python實現(xiàn)杰卡德距離以及環(huán)比算法講解
這篇文章主要為大家介紹了Python實現(xiàn)杰卡德距離以及環(huán)比算法的示例講解,有需要的朋友可以借鑒參考下2022-02-02
Python優(yōu)化列表接口進(jìn)行分頁示例實現(xiàn)
最近,在做測試開發(fā)平臺的時候,需要對測試用例的列表進(jìn)行后端分頁,在實際去寫代碼和測試的過程中,發(fā)現(xiàn)這里面還是有些細(xì)節(jié)的,故想復(fù)盤一下2021-09-09

