cookies應(yīng)對(duì)python反爬蟲知識(shí)點(diǎn)詳解
在保持合理的數(shù)據(jù)采集上,使用python爬蟲也并不是一件壞事情,因?yàn)樵谛畔⒌慕涣魃霞涌炝肆魍ǖ念l率。今天小編為大家?guī)砹艘粋€(gè)稍微復(fù)雜一點(diǎn)的應(yīng)對(duì)反爬蟲的方法,那就是我們自己構(gòu)造cookies。在開始正式的構(gòu)造之前,我們先進(jìn)行簡單的分析如果不構(gòu)造cookies爬蟲時(shí)會(huì)出現(xiàn)的一些情況,相信這樣更能體會(huì)出cookies的作用。
網(wǎng)站需要cookies才能正常返回,但是該網(wǎng)站的cookies過期很快,我總不能用瀏覽器開發(fā)者工具獲取cookies,然后讓程序跑一會(huì)兒,每隔幾分鐘再手動(dòng)獲取cookies,再讓程序繼續(xù)跑吧。如果反復(fù)這樣工作,那么寫爬蟲也就沒意義了。便開始對(duì)cookies進(jìn)行分析。
從瀏覽器的開發(fā)者工具獲取到的cookies大約有10個(gè)字段,經(jīng)過反復(fù)測(cè)試,能讓網(wǎng)站正常返回的只需要兩個(gè)字段,分別為__jsluid_h=011a522dbxxxxxxxxc1ce59d336e5e60和__jsl_clearance=1581880640.794|0|trTB4c6b%2BZpvxxxxxxxx8YqCOOo%3D (中間打碼處理)。
經(jīng)過測(cè)試,如果請(qǐng)求的時(shí)候不自己構(gòu)造cookies,默認(rèn)會(huì)返回__jsluid_h :
先嘗試了將那段js腳本保存下來,包裝成一個(gè)html文件打開,發(fā)現(xiàn)瀏覽器不停的刷新,也并沒起什么作用。那就分析一下js腳本,原來的代碼是單行的,自己整理一下并加了一些變量名和log,大概是這么個(gè)樣子:
將第16行的變量cmd打印出來看看,發(fā)現(xiàn)是另一段類似的腳本:
可以看到第二段腳本已經(jīng)開始設(shè)置cookies的__jsl_clearence 字段了。這些顯然就是混淆后的js腳本,但是分析到這里也就大概弄明白了從發(fā)送請(qǐng)求到網(wǎng)站返回是怎么回事。之所以在本地跑這段代碼會(huì)不斷刷新,是因?yàn)榈诙械膕etTimeout會(huì)讓其在1.5秒后重新請(qǐng)求,但是我們本地沒有服務(wù)處理請(qǐng)求讓其停止,所以會(huì)不斷的刷新。
而第一段腳本當(dāng)中,變量y是完整的js代碼 ,代碼中的變量名和關(guān)鍵字被進(jìn)行編碼了,變量x存儲(chǔ)的是用來替換的變量名和關(guān)鍵字,后面是解碼函數(shù)。所以現(xiàn)在的問題變成了獲取第一段腳本當(dāng)中的cmd代碼,執(zhí)行后再獲取第二段代碼的document.cookie的內(nèi)容即可。
可是對(duì)于python和js的交互我完全沒接觸過,嘗試了PyExecJS和Js2Py,都沒辦法正常執(zhí)行第一段腳本。無奈之下,我用python復(fù)現(xiàn)了第一段腳本,然后用Js2Py獲取了cookie。在請(qǐng)求一次過后,構(gòu)造cookies,再請(qǐng)求一次,就可以了:
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)歷重重的分析試驗(yàn)后,我們終于得出以上的代碼成功實(shí)現(xiàn)了構(gòu)造cookies。相信經(jīng)過本篇的學(xué)習(xí),小伙伴們又多了一種解決爬蟲阻攔獲取數(shù)據(jù)的cookies辦法了,趕快行動(dòng)起來吧。
到此這篇關(guān)于cookies應(yīng)對(duì)python反爬蟲知識(shí)點(diǎn)詳解的文章就介紹到這了,更多相關(guān)如何構(gòu)造cookies應(yīng)對(duì)python反爬蟲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3 中作為一等對(duì)象的函數(shù)解析
這篇文章主要介紹了Python3 中作為一等對(duì)象的函數(shù),本文通過實(shí)例代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12用python實(shí)現(xiàn)一幅春聯(lián)實(shí)例代碼
大家好,本篇文章主要講的是用python實(shí)現(xiàn)一幅春聯(lián)實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01關(guān)于Python網(wǎng)絡(luò)爬蟲框架scrapy
這篇文章主要介紹了關(guān)于Python網(wǎng)絡(luò)爬蟲框架scrapy,爬蟲框架是實(shí)現(xiàn)爬蟲功能的一個(gè)軟件結(jié)構(gòu)和功能組件的集合,需要的朋友可以參考下2023-04-04Python中reset_index()函數(shù)的使用
本文主要介紹了Python中reset_index()函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05一篇文章弄懂Python中所有數(shù)組數(shù)據(jù)類型
這篇文章主要給大家介紹了關(guān)于Python中所有數(shù)組數(shù)據(jù)類型的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06在python里創(chuàng)建一個(gè)任務(wù)(Task)實(shí)例
這篇文章主要介紹了在python里創(chuàng)建一個(gè)任務(wù)(Task)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04