對網易雲音樂參數(params,encSecKey)的分析


 

我們如果對網易雲音樂進行爬蟲的話,我們會發現,提交的參數是(params,encSecKey),然而這兩個參數是一串很長的東西

 

我們要對網易雲進行爬蟲,那么就一定要將這兩個參數弄明白,然后才可以進行爬蟲,不然這兩個參數將限制着我們很多事情,下面是我對這兩個參數的分析,參考了知乎大神的方法,這里將原帖地址寫上來https://www.zhihu.com/question/36081767

主要參考 作者:平胸小仙女 的分析

 

下面進行分析:

我在分析中要用到的幾個軟件,Google瀏覽器,火狐瀏覽器,burpsuite,Fiddler4,sublmie text3,notepad,pycharm

例子是:周傑倫的告白氣球,爬取評論

首先我們用Google瀏覽器查看(F12)

 

 

點擊第一個name,然后選擇response

 

看里面的內容,然后一直再name里面找,知道找到一個在response里面評論的地址

 

 

 

這里可以看到

Name為R_SO_4_418603077?csrf_token=

Response里面為評論

查看headers知道url為

http://music.163.com/weapi/v1/resource/comments/R_SO_4_418603077?csrf_token=

參數為

params:

4xP7F7cUOXDMzOaAFyjO59O+7BqsoAZYlRPUmMcRc7TEyXU74Myk+RHOhsiKB7leysTntGMRFrg3g5YGuYDvYLKmOqtzMFc4uB/YZYs5SENhFgFsVfjYGK/ej16PGp4ZUkFc8dDpTY/oXn1R0C6AGlsDbPkwn1vOxk3EH2P2qsabp1cOAlfgjxNWE4eY+iVa

encSecKey:

7a10fea1b79811ec8b0dd0a85cc0326a18b6e32c5c9ff5e3c07606d0c8f96f92e0c6fa8ea025db59e55746713122c7dcb5a74259c11b0dc32038cac3c5799d9e0da5f394cb9ef72e69f97e0d9b051270e9c9d38ee50f23e04662b2bd3dec63ec1583ef1761186557c9fd0d0be200c53a3a19f10011c5d4c81b6c87c0d0311d3e

復制到火狐瀏覽器查看一下(使用hackbar插件)

 

確定這個url是對的

然后就可以嘗試用腳本跑出來

 

但是這里的參數只能跑前面第一頁的,不能全部將評論爬出來

 

接下來分析參數

繼續用Google瀏覽器

 

 看到使用了js,那就是要分析js文件了

點擊這個js文件

 

右鍵另存為core.js

 

然后用notepad打開

看到這么亂,我們只要查找一下就好了

查找params

不斷地找,然后再第90行找到我們所要地params值

 

確定這個就是我們要找地js代碼,復制出來分析

 

這里的params和encSecKey都是經過asrsea加密的,然后asrsea里面的內容是什么,和怎樣子加密是我們要搞明白的問題

這里有個方便的方法,就是在線調試

使用Fiddler4

 

使用火狐瀏覽器打開那首歌的鏈接http://music.163.com/#/song?id=418603077

然后設置火狐瀏覽器的代理為系統代理

然后刷新那個鏈接

 

找到這個core.js

點擊右邊的AutoResponder

將那個js拉過來

 

然后選中它,點擊下面的rule,替換js為本地的js,然后點擊save

 

就是這個樣子

 

返回火狐瀏覽器,點擊F12,然后選着控制台,選中日志

 

然后就用notepad修改js文件測試

 

 

在我們需要的代碼前面輸入window.console.info(j0x);然后保存

刷新火狐瀏覽器

 

 

發現出來了很多數據,這個就是j0x那個參數了

然而{ rid: "R_SO_4_418603077", offset: "0", total: "true", limit: "20", csrf_token: "" }這個就是我們要的參數,記錄下來

嘗試點擊第二頁

 

 

又出現了一個json但是里面的參數不一樣,offset變成了20,total變成了false

再嘗試第三頁

 

 

得到結論就是offset就是頁數,而且是一個等差數列,offset =(頁數-1)*20

total除了第一頁是true之外,其他都是false

Limit猜測是評論的數量,后面驗證

觀察

 

 

發現那個asrsea的內容又4個,第一個就是剛才的json,第二個是一個固定的值,第三個不知道是不是固定值,第四個也是固定值,現在只要找到第三個,就可以解決了

查看core.js

第89行發現

 

 

那就是說第三個參數也是個固定值,

那只要將全部參數都找出來,就可以了

唯一是變量的也就是第一個參數了

同樣方式將那3個參數列出來

第二個

 

 

 

第三個

 

 

 

第四個

 

 

 

然后就可以得到全部的參數了

 

 

知道了參數然后就是看asrsea的程序了

點擊asrsea發現就是等於d方法

 

 

 

然后找出所有相關的代碼程序

 

 

 

然后按照加密,用python寫一遍,就可以了

部分代碼(完整代碼在最后面的鏈接)

 

 

 

可以看到我們用那些參加加密,然后可以得到評論,最熱的有15條,最新的有20條,

嘗試修改里面的limit參數

改為30

 

得到30個最新評論

也就是我們之前的猜測是對的

然后去掉rid嘗試

 

 

發現還是可以得到那些評論,也就是和那個rid是否有參數沒有關系

經過測試,那個limit的最大值為100

 

前面一直沒有說另外一個參數(encSecKey),因為這個相當於一個常量

觀察

 

 

發現e為第二個參數,f為第三個參數,也就是這兩個都是常量,

i為16為隨機數,

 

 

這里可以發現是隨意產生隨機數

兩個參數都用到這個i,但是,一旦我們把i就設計為16位隨機字母,將它固定了,然后傳給兩個參數進行加密 ,那么得到的encSecKey就是一個常量,所以我們直接找出一個i就

可以了,用剛才的在線調試,可以找出來。

代碼GitHub鏈接

https://github.com/niechaojun/NetEaseCloudCrawer

分析文件在

https://github.com/niechaojun/Analysis-of-the-NetEase-cloud-comment-parameters

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM