溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么構(gòu)造cookies應(yīng)對(duì)python反爬蟲

發(fā)布時(shí)間:2020-11-25 13:37:16 來源:億速云 閱讀:295 作者:小新 欄目:編程語言

小編給大家分享一下怎么構(gòu)造cookies應(yīng)對(duì)python反爬蟲,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

網(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 :

怎么構(gòu)造cookies應(yīng)對(duì)python反爬蟲

 

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

 

怎么構(gòu)造cookies應(yīng)對(duì)python反爬蟲

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

怎么構(gòu)造cookies應(yīng)對(duì)python反爬蟲

 

可以看到第二段腳本已經(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)

以上是“怎么構(gòu)造cookies應(yīng)對(duì)python反爬蟲”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI