久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

用Python代碼來(lái)下載任意指定網(wǎng)易云歌曲

 heii2 2018-09-16

來(lái)源:  日常學(xué)python   鏈接:

https://mp.weixin.qq.com/s/8BU3Pf8aZCqyDqkhXHQ2JQ


前兩天教了大家如何在控制臺(tái)上找到真實(shí)的mp3播放地址,,但是不可以下載付費(fèi)的,,因?yàn)橹荒芟螺d可播放的歌曲。至于怎樣下載付費(fèi)網(wǎng)易云音樂(lè),,還是開(kāi)個(gè)會(huì)員吧,,要知道免費(fèi)是最貴的的這個(gè)道理。


有粉絲看了前兩天文章想用代碼來(lái)裝逼,,我就為了滿足他,,特意去折騰了兩天,終于寫(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/song/enhance/player/url?csrf_token=

可以看到是個(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/cloudsearch/get/web?csrf_token=,因?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':'s-fc7\\'>','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é)編程的是要干什么的,?裝逼啊,,能用代碼絕不用其他的東西。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多