久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

cookies應(yīng)對(duì)python反爬蟲(chóng)知識(shí)點(diǎn)詳解

瀏覽:128日期:2022-07-04 11:38:02

在保持合理的數(shù)據(jù)采集上,使用python爬蟲(chóng)也并不是一件壞事情,因?yàn)樵谛畔⒌慕涣魃霞涌炝肆魍ǖ念l率。今天小編為大家?guī)?lái)了一個(gè)稍微復(fù)雜一點(diǎn)的應(yīng)對(duì)反爬蟲(chóng)的方法,那就是我們自己構(gòu)造cookies。在開(kāi)始正式的構(gòu)造之前,我們先進(jìn)行簡(jiǎn)單的分析如果不構(gòu)造cookies爬蟲(chóng)時(shí)會(huì)出現(xiàn)的一些情況,相信這樣更能體會(huì)出cookies的作用。

網(wǎng)站需要cookies才能正常返回,但是該網(wǎng)站的cookies過(guò)期很快,我總不能用瀏覽器開(kāi)發(fā)者工具獲取cookies,然后讓程序跑一會(huì)兒,每隔幾分鐘再手動(dòng)獲取cookies,再讓程序繼續(xù)跑吧。如果反復(fù)這樣工作,那么寫(xiě)爬蟲(chóng)也就沒(méi)意義了。便開(kāi)始對(duì)cookies進(jìn)行分析。

從瀏覽器的開(kāi)發(fā)者工具獲取到的cookies大約有10個(gè)字段,經(jīng)過(guò)反復(fù)測(cè)試,能讓網(wǎng)站正常返回的只需要兩個(gè)字段,分別為_(kāi)_jsluid_h=011a522dbxxxxxxxxc1ce59d336e5e60和__jsl_clearance=1581880640.794|0|trTB4c6b%2BZpvxxxxxxxx8YqCOOo%3D (中間打碼處理)。

經(jīng)過(guò)測(cè)試,如果請(qǐng)求的時(shí)候不自己構(gòu)造cookies,默認(rèn)會(huì)返回__jsluid_h :

cookies應(yīng)對(duì)python反爬蟲(chóng)知識(shí)點(diǎn)詳解

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

cookies應(yīng)對(duì)python反爬蟲(chóng)知識(shí)點(diǎn)詳解

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

cookies應(yīng)對(duì)python反爬蟲(chóng)知識(shí)點(diǎn)詳解

可以看到第二段腳本已經(jīng)開(kāi)始設(shè)置cookies的__jsl_clearence 字段了。這些顯然就是混淆后的js腳本,但是分析到這里也就大概弄明白了從發(fā)送請(qǐng)求到網(wǎng)站返回是怎么回事。之所以在本地跑這段代碼會(huì)不斷刷新,是因?yàn)榈诙械膕etTimeout會(huì)讓其在1.5秒后重新請(qǐng)求,但是我們本地沒(méi)有服務(wù)處理請(qǐng)求讓其停止,所以會(huì)不斷的刷新。

而第一段腳本當(dāng)中,變量y是完整的js代碼 ,代碼中的變量名和關(guān)鍵字被進(jìn)行編碼了,變量x存儲(chǔ)的是用來(lái)替換的變量名和關(guān)鍵字,后面是解碼函數(shù)。所以現(xiàn)在的問(wèn)題變成了獲取第一段腳本當(dāng)中的cmd代碼,執(zhí)行后再獲取第二段代碼的document.cookie的內(nèi)容即可。

可是對(duì)于python和js的交互我完全沒(méi)接觸過(guò),嘗試了PyExecJS和Js2Py,都沒(méi)辦法正常執(zhí)行第一段腳本。無(wú)奈之下,我用python復(fù)現(xiàn)了第一段腳本,然后用Js2Py獲取了cookie。在請(qǐng)求一次過(guò)后,構(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)過(guò)本篇的學(xué)習(xí),小伙伴們又多了一種解決爬蟲(chóng)阻攔獲取數(shù)據(jù)的cookies辦法了,趕快行動(dòng)起來(lái)吧。

到此這篇關(guān)于cookies應(yīng)對(duì)python反爬蟲(chóng)知識(shí)點(diǎn)詳解的文章就介紹到這了,更多相關(guān)如何構(gòu)造cookies應(yīng)對(duì)python反爬蟲(chóng)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 罗江县| 牙克石市| 梁河县| 永兴县| 隆林| 绍兴县| 唐河县| 将乐县| 永寿县| 宁强县| 诸暨市| 历史| 邢台市| 新竹市| 雅安市| 昭平县| 利辛县| 淳化县| 岱山县| 富顺县| 清丰县| 平谷区| 资兴市| 镇雄县| 罗山县| 北川| 洪洞县| 巢湖市| 象州县| 城口县| 平陆县| 福鼎市| 汝阳县| 年辖:市辖区| 越西县| 胶州市| 北辰区| 星子县| 镇原县| 屯留县| 千阳县|