摘要:爬蟲之網易云音樂下載目標用根據網易云音樂的,下載音樂,保存到本地格式可以下載歌曲的范圍所有能夠聽的歌曲配置基礎模塊可選可選這是哈希函數如和和各種加密算法,,,等的集合。
Python爬蟲之網易云音樂下載 目標
用Python根據網易云音樂的ID,下載音樂,保存到本地MP3格式
可以下載歌曲的范圍:所有能夠聽的歌曲配置基礎
Python 3.5
模塊pycrypto
base64
requests
json
sys(可選)
progressbar(可選)
pycrypto這是哈希函數(如SHA256和RIPEMD160)和各種加密算法(AES,DES,RSA,ElGamal等)的集合。主要是用來加密解密,為何要用這個呢,稍后分析安裝
pip install pycryptobase64
python 自帶的模塊,主要是配合pycrypto模塊使用
requests、jsonrequests主要用來發送網絡請求, json主要用于解析網絡請求的response
分析為了避免麻煩,我們選擇網頁版的網易云音樂而不用客戶端的,省去抓包的麻煩
我們隨便選擇一首歌(這里選擇:一千零一夜 )然后打開網頁,得到如下界面:
然后打開瀏覽器網絡面板,點擊播放按鈕,然后查看網絡請求,如下:
一共發送了四個網絡請求,仔細一點,我們發現了一個有趣的請求,就是上圖最后一個,帶有.mp3后綴的那個,很明顯,這里是將一千零一夜這首歌緩存了下來,復制該網絡請求到瀏覽器地址欄打開,然后瀏覽器就開始下載一千零一夜這首歌。到此,好像前面提的所謂的目標完成了,但是我不開心,身為一個開發人員,這么沒有技術含量的東西,是不是可以考慮用技術去實現呢。能不能輸入一個歌曲的ID,然后就把歌曲下回來呢。
我們播放多幾首歌曲,很容易發現,每一首歌曲都會有一個獨立的鏈接,仔細看看這個鏈接(http://m10.music.126.net/2018...),顯然是經過處理的,這個處理有可能是前端直接處理的,也有可能是后端處理的(是不是說了等于白說。。。),后端處理會有多種情況,其中一種就是另一個網絡請求返回來對應的東西,反正網絡請求不多,我們先看看網咯請求,一看嚇一跳,還真蒙著了,上圖中第一個網絡請求返回來的數據
再看一下請求的組成
只要模擬這個請求,就可以得到歌曲的鏈接,只要得到鏈接就能下載歌曲。在該請求的參數中,params以及encSecKey都是一個經過加密的數據,在反復分析點擊播放按鈕的事件后,得到JavaScript進行了如下操作
var bPc2x = window.asrsea(JSON.stringify(j4n), buv7o(["流淚", "強"]), buv7o(Tg9X.md), buv7o(["愛心", "女孩", "驚恐", "大笑"])); e4i.data = k4o.cE5J({ params: bPc2x.encText, encSecKey: bPc2x.encSecKey })
其中,window.asrsea函數代碼如下
!function() { function a(a) { var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = ""; for (d = 0; a > d; d += 1) e = Math.random() * b.length, e = Math.floor(e), c += b.charAt(e); return c } function b(a, b) { var c = CryptoJS.enc.Utf8.parse(b) , d = CryptoJS.enc.Utf8.parse("0102030405060708") , e = CryptoJS.enc.Utf8.parse(a) , f = CryptoJS.AES.encrypt(e, c, { iv: d, mode: CryptoJS.mode.CBC }); return f.toString() } function c(a, b, c) { var d, e; return setMaxDigits(131), d = new RSAKeyPair(b,"",c), e = encryptedString(d, a) } function d(d, e, f, g) { var h = {} , i = a(16); return h.encText = b(d, g), h.encText = b(h.encText, i), h.encSecKey = c(i, e, f), h } function e(a, b, d, e) { var f = {}; return f.encText = c(a + e, b, d), f } window.asrsea = d, window.ecnonasr = e }();
由上得知,window.asrsea一共傳遞了四個參數(假設為window.asrsea(a, b, c, d)),而這四個參數中,只有 a是一個跟歌曲id相關的參數,其他三個都是一個常量
b = "010001"; c = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7" d = "0CoJUm6Qyw8W8jud"
再研究window.asrsea的代碼,發現請求的兩個參數params以及encSecKey都在這里加密了,其中params經過了兩次AES加密,第一次加密的時候,傳入了兩個參數,一個是a,一個是d,第二個加密的兩個參數,第一個是第一次加密的結果,第二個是一個16位的隨機字符串,因為是一個隨機的字符串,所以我們可以隨便用一個16位的字符串就行了,由于這里這個隨機的字符串固定了,那第二個參數encSecKey就是一個固定的值
至此,我們的分析完成,也得到了需要的信息
Python想要模擬請求,那就需要進行AES加密,因此我們就用到了開始所說的pycrypto模塊
from Crypto.Cipher import AES import base64 def aes_encrypt(text, key): iv = "0102030405060708" pad = 16 - len(text) % 16 text = text + pad * chr(pad) encryptor = AES.new(key, AES.MODE_CBC, iv) result = encryptor.encrypt(text) result_str = base64.b64encode(encrypt_text) return result_str
QQ交流群: 173318043
項目地址:lmissy.cn
如果本文對你有所幫助,請點個贊,這是我努力下去的無限動力,謝謝(??ω??)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41241.html
摘要:完整代碼如下正在下載根據網易云歌曲的直接下載歌曲上安裝爬取網易云歌曲源碼地址 首發知乎:https://zhuanlan.zhihu.com/p/... 目標 偶然的一次機會聽到了房東的貓的《云煙成雨》,瞬間迷上了這慵懶的嗓音和學生氣的歌詞,然后一直去循環聽她們的歌。然后還特意去刷了動漫《我是江小白》,好期待第二季... 我多想在見你,哪怕匆匆一眼就別離... 好了,不說廢話了。這次...
摘要:首先從上拉取項目然后依次安裝以下依賴之后配置的以下字段公共空間名稱不加后綴私有空間名稱不加后綴二選一本地文件名上傳文件在空間中的名稱一切配置完成之后開始使用,方法如下按提示輸入歌曲名稱下載歌曲效果展示下載之后的歌曲可以在文件夾中查看首先從git上拉取項目git clone https://github.com/money666-sxy/msc_crawler然后依次安裝以下依賴pip3 in...
摘要:對于這次的爬蟲來說,由于網易云音樂以及音樂網頁中大部分元素都是使用渲染生成的,因此選擇使用來完成這次的腳本??梢园l現網易云音樂的手機版歌單地址是?,F在已經支持網易云音樂與音樂歌單的互相同步。 本文主要介紹selenium在爬蟲腳本的實際應用。適合剛接觸python,沒使用過selenium的童鞋。(如果你是老司機路過的話,幫忙點個star吧) 項目地址 https://github.c...
摘要:在這之前,還是有必要對一些概念超輕量級反爬蟲方案后端掘金前言爬蟲和反爬蟲日益成為每家公司的標配系統。 爬蟲修煉之道——從網頁中提取結構化數據并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關注我的專題:爬蟲修煉之道 上篇 爬蟲修煉之道——編寫一個爬取多頁面的網絡爬蟲主要講解了如何使用python編寫一個可以下載多頁面的爬蟲,如何將相對URL轉為絕對URL,如何限速,...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
閱讀 1575·2021-11-23 10:01
閱讀 2969·2021-11-19 09:40
閱讀 3214·2021-10-18 13:24
閱讀 3464·2019-08-29 14:20
閱讀 2980·2019-08-26 13:39
閱讀 1276·2019-08-26 11:56
閱讀 2662·2019-08-23 18:03
閱讀 373·2019-08-23 15:35