當前位置:
首頁 > 科技 > Skr!如何用 Python 爬取中國新說唱熱門歌曲?

Skr!如何用 Python 爬取中國新說唱熱門歌曲?

作者 | 初一

責編 | 郭芮

之前風靡朋友圈的「skr」流行語把中國新說唱這一節目帶上了熱議高峰,本文就來分析下,如何用Python爬取大受歡迎的說唱歌曲。

首先登錄https://music.163.com/ 網易雲音樂搜索新說唱,打開Chrome的開發工具工具選擇Network並重新載入頁面,找到與評論數據相關的請求即name為web?csrf_token=的POST請求,如下圖所示:

查看該請求的headers我們發現formData包含了兩個參數:params、encSecKey。顯然這兩個參數是經過JS加密的,這就是網易雲反爬蟲的一種策略。如下圖:

我們再來看一下請求的Initiator有個core 2ab1b2b..js。因此我們需要分析一下這個JS,找出formData加密的規則即可。

將JS文件進行格式化,全局搜索params或者encSecKey:

params和encSecKey是從bSC8u這個對象中取的:

而這個對象是由windows.asrsea() 這個方法獲得的,定位到該方法。如下圖所示:

通過分析代碼我們發現d函數才是最終的出口。分析d函數:

通過a(16)函數生成一個長度為16的隨機字元串;

encText這個參數通過兩次調用b(a,b) 函數完成,這個函數的作用為AES加密;

調用 c(i, e, f)得到encSecKey,這個函數的作用是進行RSA加密。

AES加密:AES(Advanced Encryption Standard)對稱加密演算法是一種高級數據加密標準,是美國聯邦政府採用的一種區塊加密標準,可有效抵制針對DES的攻擊演算法。特點是,密鑰建立時間短、靈敏性好、內存需求低、安全性高。

RSA加密:RSA加密演算法是一種非對稱加密演算法。在公開密鑰加密和電子商業中RSA被廣泛使用。到目前為止,世界上還沒有任何可靠的攻擊RSA演算法的方式。只要其鑰匙的長度足夠長,用RSA加密的信息實際上是不能被解破的。

通過上面分析,除了 i 是一個隨機字元串,我們只需要知道d、e、f、g這四個參數就可以構造請求進行後續操作了。接下來我們進行JS斷點調試。

經過多次調試,我們發現e、f、g這三個值是不變的,唯一改變的是d。再結合上文分析,encSecKey由函數c(i, e, f)得到的,那是不是就意味著encSeckey這個值是不變的呢?

然而,經過代碼測試並不是這樣,要保證encSecKey和params中的隨機字元串(也就是i的值)是一樣的才可以。

首先我們先實現函數a,即生成16位的隨機字元:

其次來實現加密參數的生成(說白了就是翻譯JS代碼為Python代碼):

最後參數構造完畢,就可以開始咱們的爬蟲了。

由於RSA是非對稱加密,無法通過encSecKey解密出i,沒有i也就無法解密params,所以也就只能對每個介面進行斷點調試,觀察請求的構造。

搜索歌曲的data為:

查詢歌曲信息的data:

接下來就可以開始寫爬蟲了。分析網頁請求我們發現搜索歌曲的時候響應是在https://music.163.com/weapi/cloudsearch/get/web?csrf_token= 這個請求里響應的:

歌詞信息由 https://music.163.com/weapi/song/lyric?csrf_token=這個請求響應的:

萬事俱備,開始Coding!

運行之後查看資料庫:

現在我們有了Rap歌手的id,從全網爬他們的說唱歌曲還不是so easy?

作者:初一,曾在知名互聯網公司擔任java研發一職,項目帶頭人。18年中旬轉行Python,熱愛爬蟲喜歡折騰新東西。coding與樂趣同在。Talk is cheap,Show me the code.

聲明:本文為作者投稿,版權歸其個人所有。

蘋果手機的微信改版了,

想快速看到CSDN的熱乎文章,

趕快把CSDN公眾號設為星標吧,

打開公眾號,點擊「設為星標」就可以啦!

安卓手機的用戶,

點擊公眾號右上角小人,就可以置頂啦。

2018 AI開發者大會

只講技術,拒絕空談

2018 AI開發者大會首輪重磅嘉賓及深度議題現已火熱出爐,掃碼搶「鮮」看。國慶特惠,購票立享5折優惠!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

漫畫:什麼是時間複雜度?
為什麼 Python 4.0 會與 Python 3.0 不同?

TAG:CSDN |