摘要:至于怎樣下載付費(fèi)網(wǎng)易云音樂(lè),還是開(kāi)個(gè)會(huì)員吧,要知道免費(fèi)是最貴的的這個(gè)道理。代碼寫(xiě)完了,那還等什么,運(yùn)行一下裝逼啊這下好了,裝逼失敗,被網(wǎng)易云認(rèn)出來(lái)我是爬蟲(chóng)的,那我試試加下請(qǐng)求頭結(jié)果加了還是一個(gè)樣,這個(gè)也算是個(gè)巨坑吧。
前兩天教了大家如何在控制臺(tái)上找到真實(shí)的mp3播放地址,但是不可以下載付費(fèi)的,因?yàn)橹荒芟螺d可播放的歌曲。至于怎樣下載付費(fèi)網(wǎng)易云音樂(lè),還是開(kāi)個(gè)會(huì)員吧,要知道免費(fèi)是最貴的的這個(gè)道理。
有粉絲看了前兩天文章想用代碼來(lái)裝逼,我就為了滿(mǎn)足他,特意去折騰了兩天,終于寫(xiě)出來(lái)了,迫不及待與大家分享一把。不得不說(shuō),這里面坑很大,遇到幾個(gè)大坑在那里折騰了幾個(gè)小時(shí),分享出來(lái)讓大家想裝逼的少踩點(diǎn)坑。廢話不多說(shuō),開(kāi)始今天主題!
1.尋找目標(biāo)請(qǐng)求
打開(kāi)網(wǎng)易云主頁(yè) ,打開(kāi)開(kāi)發(fā)者工具,點(diǎn)擊搜索
是不是看到很多請(qǐng)求,不要慌,慢慢找。找了之后你會(huì)發(fā)現(xiàn)下面這個(gè)鏈接
這個(gè)鏈接返回的是json,里面包含的是歌曲的信息,但是沒(méi)有MP3播放鏈接,這個(gè)或許有用,因?yàn)橛懈枨膇d,先放著。
我試著點(diǎn)擊歌曲播放,又增加了幾個(gè)請(qǐng)求。一看,里面就有我想要的MP3鏈接。
這樣子,獲取mp3請(qǐng)求的鏈接出來(lái)了,https://music.163.com/weapi/s...
可以看到是個(gè)post請(qǐng)求,狀態(tài)碼為200,我們接著往下看fromdata是什么數(shù)據(jù)。
是兩個(gè)加密了的參數(shù),不過(guò)不怕,如果你看過(guò)我之前寫(xiě)的利用python爬取網(wǎng)易云音樂(lè),并把數(shù)據(jù)存入mysql你會(huì)發(fā)現(xiàn)fromdata參數(shù)是一樣的,所以破解加密參數(shù)思路是一樣的,不過(guò)這次我不用fiddler了,只用開(kāi)發(fā)者工具來(lái)調(diào)試,看好了?。?!我們看看這個(gè)請(qǐng)求的來(lái)源是什么。
點(diǎn)進(jìn)去看看,是個(gè)混淆的js,點(diǎn)左下角可以格式化,這樣好看點(diǎn)。
進(jìn)行搜索params,你會(huì)發(fā)現(xiàn)這個(gè):
可以看到,加密的方式都沒(méi)有改變,還是和之前一樣,只是變量名字改變了。window.asrsea()有四個(gè)參數(shù),先看看后面三個(gè)參數(shù),因?yàn)槎己芟嗨?。繼續(xù)進(jìn)行搜索定位。
可以看出,返回的是一個(gè)固定的內(nèi)容,所以不用管了,等下可以進(jìn)行調(diào)試抓出來(lái)。再看看第一個(gè)參數(shù)。是一個(gè)json。我們可以進(jìn)行斷點(diǎn)調(diào)試進(jìn)行獲取。
進(jìn)行刷新,你會(huì)看到下面這些內(nèi)容。
可以看到window.asrsea()是一個(gè)d函數(shù),定位過(guò)去看看,然后又給個(gè)斷點(diǎn)。
點(diǎn)擊去往下一個(gè)斷點(diǎn),你會(huì)看到
四個(gè)參數(shù)都出來(lái)了,我直接貼出來(lái)這里吧:
d:"{"ids":"[523946593]","br":128000,"csrf_token":""}"e:"010001"f:"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"g:"0CoJUm6Qyw8W8jud"
參數(shù)都出來(lái)了,很容易就知道d參數(shù)里面的ids對(duì)應(yīng)的就是歌曲id,所以說(shuō)剛才找的鏈接有用了。br是個(gè)固定值,對(duì)應(yīng)的可能是歌曲的質(zhì)量之類(lèi)的,不需要管的。
下面再看看d函數(shù)是如何加密的:
里面又包含了很多?a , b ,c?的三個(gè)函數(shù),先看看 a 函數(shù)
這個(gè) a 函數(shù)是在一堆字符串中隨機(jī)找出16個(gè)字符串。ok,下一個(gè)。
b 函數(shù)采用了?aes?加密, 加密的密文是?e?,也就是參數(shù)的?a?內(nèi)容,c是密鑰,第三個(gè)參數(shù)中有偏移量?d?和加密模式?CBC?。再看看 c 函數(shù)。
c 函數(shù)是采用?rsa?加密,b 為加密指數(shù), 空字符串為解密參數(shù),c 為加密系數(shù)。
好了,三個(gè)函數(shù)分析完畢,再回頭看看 d 函數(shù)。
可以看到params參數(shù)是經(jīng)過(guò)兩次 b 函數(shù)生成的,也就是用 aes 加密兩次,encSecKey參數(shù)是通過(guò) c 函數(shù)生成的,也就是通過(guò) rsa 加密方式生成的。
廢話不多說(shuō),Talk is cheap, show me the code
2.代碼部分
先把隨機(jī)生成16個(gè)字符串的展示下
為了讓大家好看點(diǎn),代碼以后都用照片代替
接下來(lái)是aes加密的
這里有一個(gè)巨坑,谷歌了也沒(méi)發(fā)現(xiàn)有誰(shuí)遇到過(guò),就是用python進(jìn)行aes加密的時(shí)候,只能加密數(shù)字和字母,不能對(duì)中文進(jìn)行加密,會(huì)報(bào)錯(cuò)
Input strings must be a multiple?of?16?in?length
解決方方法是在cbc加密的模式下,在對(duì)字符串補(bǔ)齊為長(zhǎng)度為16的倍數(shù)時(shí),長(zhǎng)度指標(biāo)不能用中文,要先把他轉(zhuǎn)為unicode編碼的長(zhǎng)度才可以。比如上面的,下面的就是錯(cuò)誤示范
pad?=?16?- len(text) %?16
此坑爬過(guò)去了,接著下一個(gè)rsa加密
還有需要注意一下的是,在生成隨機(jī)16個(gè)字符串的時(shí)候,需要保證params和encSecKey兩個(gè)參數(shù)是對(duì)應(yīng)的這個(gè)隨機(jī)字符串是一致的。要不然加密之后還是會(huì)出錯(cuò),獲取不了正確信息。好了,最后一個(gè)是獲取兩個(gè)加密參數(shù)。
代碼寫(xiě)完了,那還等什么,運(yùn)行一下裝逼?。?/p>
{"code": -460,?"msg":?"Cheating"}
這下好了,裝逼失敗,被網(wǎng)易云認(rèn)出來(lái)我是爬蟲(chóng)的,那我試試加下請(qǐng)求頭?結(jié)果加了還是一個(gè)樣,這個(gè)也算是個(gè)巨坑吧。解決方法還是加請(qǐng)求頭,只需要加兩個(gè),一個(gè)是瀏覽器識(shí)別?user-agent?,另一個(gè)是?cookie?,想不到吧?我也想不到,居然還有在cookie上面做反爬的,但是我用了?session?來(lái)保持cookie還是不行,需要自己復(fù)制瀏覽的cookie就行保存才可以。
歌曲現(xiàn)在能下載了,可我要的是任意歌曲啊。那好,我們?cè)偃タ纯催@個(gè)請(qǐng)求https://music.163.com/weapi/c...,因?yàn)榉祷氐氖歉枨鷌d。
3.尋找歌曲id
可以看到,參數(shù)還是和上面的那個(gè)請(qǐng)求的參數(shù)一樣,但是我們知道的是那個(gè) d 函數(shù),后三個(gè)參數(shù)是不變的,所以我們只需要找前面那個(gè)變化的參數(shù)就可以了,還是同樣的操作,斷點(diǎn)調(diào)試。
也是很容易就找到的,d 參數(shù)就是下面這個(gè)
d?= "{"hlpretag":"","hlposttag":"","s":"可能否","type":"1","offset":"0","total":"true","limit":"30","csrf_token":""}"
這個(gè)分析就可以說(shuō)完畢了。
4.搜索歌曲代碼
這個(gè)是獲取歌曲 id 的代碼,其他的沒(méi)什么問(wèn)題了。
最后
我還將程序打包了,遇到了喜歡的歌曲都可以下載下來(lái),雖然可以直接用網(wǎng)易云下載,不用那么麻煩,但是我們學(xué)編程的是要干什么的?裝逼啊,能用代碼絕不用其他的東西。
效果圖如上,下載杠桿的,需要完整代碼的可以后臺(tái)回復(fù)音樂(lè)即可送給你。
ps:原創(chuàng)不易,寫(xiě)了這篇文章可謂花費(fèi)了我1024根頭發(fā),聽(tīng)說(shuō)轉(zhuǎn)發(fā)是生發(fā)的最有效之道,所以你懂得!
掃面二維碼關(guān)注獲取更多有趣的python文章
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42184.html
摘要:爬蟲(chóng)之網(wǎng)易云音樂(lè)下載目標(biāo)用根據(jù)網(wǎng)易云音樂(lè)的,下載音樂(lè),保存到本地格式可以下載歌曲的范圍所有能夠聽(tīng)的歌曲配置基礎(chǔ)模塊可選可選這是哈希函數(shù)如和和各種加密算法,,,等的集合。 Python爬蟲(chóng)之網(wǎng)易云音樂(lè)下載 目標(biāo) 用Python根據(jù)網(wǎng)易云音樂(lè)的ID,下載音樂(lè),保存到本地MP3格式 可以下載歌曲的范圍:所有能夠聽(tīng)的歌曲 配置基礎(chǔ) Python 3.5 模塊 pycrypto base64 ...
摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:高仿低配網(wǎng)頁(yè)版網(wǎng)易云音樂(lè)播放器前言沒(méi)有使用任何框架,只是想用最簡(jiǎn)單純的代碼實(shí)現(xiàn)下前臺(tái)后臺(tái)是參考網(wǎng)上的例子寫(xiě)的,代碼是在的基礎(chǔ)上重新寫(xiě)的還有她的姊妹篇網(wǎng)易云音樂(lè)移動(dòng)端,請(qǐng)查看這里寫(xiě)在前頭的話鄙人野生前端一只,專(zhuān)業(yè),自學(xué)前端已經(jīng)一年多了 HTML+CSS+JAVASCRIPT 高仿低配網(wǎng)頁(yè)版網(wǎng)易云音樂(lè)播放器 showImg(https://segmentfault.com/img/remo...
摘要:高仿低配網(wǎng)頁(yè)版網(wǎng)易云音樂(lè)播放器前言沒(méi)有使用任何框架,只是想用最簡(jiǎn)單純的代碼實(shí)現(xiàn)下前臺(tái)后臺(tái)是參考網(wǎng)上的例子寫(xiě)的,代碼是在的基礎(chǔ)上重新寫(xiě)的還有她的姊妹篇網(wǎng)易云音樂(lè)移動(dòng)端,請(qǐng)查看這里寫(xiě)在前頭的話鄙人野生前端一只,專(zhuān)業(yè),自學(xué)前端已經(jīng)一年多了 HTML+CSS+JAVASCRIPT 高仿低配網(wǎng)頁(yè)版網(wǎng)易云音樂(lè)播放器 showImg(https://segmentfault.com/img/remo...
閱讀 2381·2021-11-24 10:33
閱讀 1450·2019-08-30 15:43
閱讀 3335·2019-08-29 17:24
閱讀 3548·2019-08-29 14:21
閱讀 2281·2019-08-29 13:59
閱讀 1789·2019-08-29 11:12
閱讀 2892·2019-08-28 18:00
閱讀 1921·2019-08-26 12:17