反反爬蟲之js加密參數(shù)獲取

反爬蟲與反反爬蟲從爬蟲誕生開始就已經(jīng)存在,反爬策略層出不窮,反反爬也都應(yīng)對有招。

就我目前碰到的反爬,從簡單的user-agent,ajax,封ip,到限制賬號訪問頻率,驗(yàn)證碼,加密參數(shù)等。這些都是非常常見的反爬,相信大家基本上都碰到過,除此之外,也有一些調(diào)皮的網(wǎng)站會有一些有特色的反爬,比如某個招聘網(wǎng)站,網(wǎng)頁元素審查看到的標(biāo)簽排版及一些屬性與網(wǎng)頁源碼有點(diǎn)出入,通過js對網(wǎng)頁標(biāo)簽進(jìn)行了改動(這里并不是指的ajax加載新內(nèi)容),對于一些接觸爬蟲不久的朋友,可能會死磕在這里,用bs/xpath怎么死都取不出對應(yīng)的內(nèi)容呢,因?yàn)樗麄円恢痹趂12元素審查,那并不是源碼的真實(shí)面目。以上這個例子,來自我的一個爬蟲初學(xué)者朋友。還有很多有趣的反爬,比如以下這個。。。。

這是我今天在一個群里面看到的哈哈。

對反爬蟲與反反爬蟲的恩怨情仇感到有興趣的,推薦看這篇文章,或許你已經(jīng)看過了:干貨 | 那些你不知道的爬蟲反爬蟲套路

在tg上一個python爬蟲群里面,有個群友讓我?guī)兔饷芤粋€網(wǎng)站的加密參數(shù),當(dāng)時記著了,現(xiàn)在考完有時間就看了看。

這個網(wǎng)站是一個快手火山抖音小視頻合集網(wǎng)站,網(wǎng)站鏈接在這:

https://kuaiyinshi.com/

這個網(wǎng)站有一個接口,可以獲取隨機(jī)一個(我也不知道是什么規(guī)則,姑且稱為隨機(jī))小視頻的內(nèi)容包括評論等等:

https://kuaiyinshi.com/api/dou-yin/recommend/

可以從這個接口中獲得一個視頻的url,比如:

//aweme.snssdk.com/aweme/v1/play/?video_id=:117:150:176:161:188:157:125:184:137:98:176:123:117:102:131:159:122:99:128:161:141:203:128:137:190:147:130:166:163:152:134:203&line=0&ratio=720p&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0

但事實(shí)上,直接用這個鏈接是獲取不到視頻的,通過抓包發(fā)現(xiàn),真正的視頻鏈接是以下這個:

//aweme.snssdk.com/aweme/v1/play/?video_id=4fc7b70d02b7436593373e35ec4bbe9a&line=0&ratio=720p&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0

通過對比可以看出,video_id參數(shù)的值i發(fā)生了改變,由:117:150:176:161:188:157:125:184:137:98:176:123:117:102:131:159:122:99:128:161:141:203:128:137:190:147:130:166:163:152:134:203變?yōu)榱?fc7b70d02b7436593373e35ec4bbe9a

需要找到這個加密方法。

以下講講步驟

首先,肯定是打開網(wǎng)頁開發(fā)者工具,刷新網(wǎng)頁,抓包,分析抓到的http包內(nèi)容。

然后,肯定是,ctrl+shit+F,全局搜索,搜索關(guān)鍵字:video_id。

可以看到,由兩個js文件中出現(xiàn)了video_id。

分別為:

https://kys.tqdn.cn/js/main.js?t=1530178376 ? ?

https://kys.tqdn.cn/js/public.js?t=1529140999 ? ?

其中main.js如下:

太亂了,js代碼就和毛線球一樣,愿意的話,可以把它扯亂成一團(tuán),然后讓你去把它理清。很顯然,為了反爬,這個網(wǎng)站就是這樣做的。

但不管怎么說,還得繼續(xù)。

把它們?nèi)繌?fù)制出來,然后找個在線格式化js代碼的網(wǎng)頁小工具。得到如下格式化代碼:

另外一個js文件也是這樣。

然后再定位video_id在這兩個js文件中的位置,觀察一下發(fā)現(xiàn),public.js中的video_id和加密方法無關(guān)系

在一個judgeSource的函數(shù)里面,大概可以看出是判斷視頻為抖音還是快手抑或是火山的一個函數(shù)。

所以只需觀察main.js文件,大概長這個樣子:

是不是很崩潰。。。

先定位下video_id在這個文件中的位置:

看到這第一個變量?__Ox1169c就大概明白了,原來這個文件把一些關(guān)鍵字詞全部讓這個__Ox1169c數(shù)組元素代替了,所以這個js文件才看起來那么讓人發(fā)慌。

到這里其實(shí)考驗(yàn)的就是耐心了,一縷縷的把代碼過一遍就行。

我們先看這些函數(shù)名字,發(fā)現(xiàn)都很有規(guī)律的,比如說,我們看到一個creatplay函數(shù),猜也能猜出它的作用吧。在控制臺試一下就知道了:

發(fā)現(xiàn)一回車,視頻便換了一個,ok這個函數(shù)肯定和加密video_id有關(guān),我們以這個函數(shù)為入口開始看。

看第一個 var _ =??__Ox1169c[94];

我們可以在控制臺輸入?__Ox1169c[94] 回車,很方便的查看 __Ox1169c[94]的值

按照這個方法,一個個把它還原成成直觀的js代碼,大致理解。

最后定位到這里:

發(fā)現(xiàn) ab3d7fc 這個函數(shù)就是加密方法,ok到此為止,繼續(xù)看?ab3d7fc 這個函數(shù)。

這個函數(shù)的兩個參數(shù),一個是video_id,一個是ky,ky在控制臺輸入也可獲得。

將 ab3d7fc 這個函數(shù),還原成本來的js代碼:

這個時候,可以選擇用execjs來執(zhí)行這段js,或者把它換成python方法。

到此,成功獲取了這個網(wǎng)站js加密參數(shù)的加密方法。

想爬抖音視頻,卻不知道抖音的app內(nèi)加密參數(shù),又不會逆向,除了分享鏈接接口的方法,這個網(wǎng)站上的抖音視頻也很好爬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,067評論 25 708
  • 1. 概述 本文主要介紹網(wǎng)絡(luò)爬蟲,采用的實(shí)現(xiàn)語言為Python,目的在于闡述網(wǎng)絡(luò)爬蟲的原理和實(shí)現(xiàn),并且對目前常見的...
    Lemon_Home閱讀 2,803評論 0 21
  • 我不想 背叛 我的諾言 風(fēng)霜 摧折了所有枝節(jié) 脊梁依然挺的 那把無情的刀 直插心臟 差之毫厘 生命仍延續(xù) 傷痕在 ...
    殘障人生閱讀 183評論 0 3
  • 昨天買了幾棵小蔥包餃子,調(diào)餡后還剩下幾顆小蔥。晚上吃飯時我沒胃口,給兒子煮了一些水餃,自己干脆把小蔥洗了洗拿來蘸醬...
    一念見花開閱讀 816評論 0 0
  • 夏語 一場雨, 下滿了離愁, 窗外路人說著不知明的話語。 葉子堆疊著相遇, 泛黃里有暗黑污垢, 不變的路。...
    青廬閱讀 191評論 0 0