Python爬蟲-QQ音樂下載

代碼效果

Github源碼在這里

代碼的效果其實(shí)和上一篇網(wǎng)易云音樂的爬取是一模一樣的

先搜索歌名或者歌手 找到想要下載的編號(hào) 輸入編號(hào)下載即可

上一篇 網(wǎng)易云音樂下載

相比于網(wǎng)易云音樂 QQ音樂簡直太渣了(專指加密)

第一點(diǎn):QQ音樂都是get請求 沒有post請求 不需要傳入一些奇葩的參數(shù) 所以比較簡單

第二點(diǎn):QQ音樂下載過來是m4a格式 而網(wǎng)易云是MP4 (源文件就是這樣)? 只能說網(wǎng)易云更良心 m4a格式犧牲了音質(zhì) 節(jié)省了空間 當(dāng)然 我這樣的木耳也聽不出來啥區(qū)別 就是MP4常見一點(diǎn)

第三點(diǎn):QQ音樂沒有使用復(fù)雜的RSA、AES加密算法 下面是TFBOYS的《喜歡你》的文件地址 復(fù)制打開 就是音頻文件 vkey就是加密的參數(shù) 看似這個(gè)串?dāng)?shù)字加密過 挺難獲得 其實(shí)也是寫在json里的 直接拿 貼上就行了

http://dl.stream.qqmusic.qq.com/C400001VySE80MYPrC.m4a?vkey=A43C8A65EED5DD07B6F5BF0DFDA934FBA0993658AF76F1C70693F679972D0B074E5FC3D91E480605D99AFE6D5CEEDD6BD3722C78E3505D72&guid=6800588318&uin=0&fromtag=66

PS:為什么拿這首歌舉例子 純粹是搜索里第一個(gè) 順手就點(diǎn)了

下面詳細(xì)講解了QQ音樂的抓取

1.先進(jìn)入搜索頁搜索 仍以“喜歡你”為例

2.F12 F5 抓包 一下子就找到目標(biāo)文件(其實(shí)花了好久 一個(gè)一個(gè)找下來的) 基本就是json文件 不是json 一般一看就不是

點(diǎn)擊Headers 獲得地址 這個(gè)地址非常非常的長 其實(shí)就是一些參數(shù)的拼接 然后就會(huì)沒有用的參數(shù)是可以參數(shù)的 一個(gè)一個(gè)刪掉測試下內(nèi)容會(huì)不會(huì)發(fā)生變化 沒用的就扔掉

刪減后的url變成https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&p=1&n=20&w=%E5%96%9C%E6%AC%A2%E4%BD%A0

看吧 很多參數(shù)都沒用 有用的就那么幾個(gè) 其中說明下w參數(shù) w就是搜索的內(nèi)容 可作任意替換

尤其是中文搜索要做編碼處理 quote()函數(shù)一下

3.這樣就獲得每首歌曲的詳細(xì)信息

這里舉例打印出歌名、作者、專輯、時(shí)長

這里有兩個(gè)細(xì)節(jié)

一:作者(歌手)有多歌手的情況 這里首先遍歷所有的歌手信息 獲取后 用join()串在一起

二:數(shù)據(jù)中的歌曲時(shí)長是秒單位的 這里使用divmod函數(shù)轉(zhuǎn)化后X分X秒

打印歌曲信息

4.拿到搜索的列表 定位某一首歌的url 找之前提過的下載地址

搜索列表中隨便點(diǎn)擊一首歌 進(jìn)入 點(diǎn)擊播放 進(jìn)入音樂播放器 F12 F5 抓包

找到了之前提到過的音頻文件的url 發(fā)現(xiàn)關(guān)鍵參數(shù)vkey vkey是從哪里的來的

找啊找啊 終于找到了? 就在這擺著? 這也太太太放心了? 網(wǎng)易云好歹加了好幾層密

同樣點(diǎn)擊Headers 又是一非常非常非常長的url? 刪刪刪 刪掉那些沒有的參數(shù)

最后精簡為

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&cid=205361747&songmid=001VySE80MYPrC&filename=C400001VySE80MYPrC.m4a&guid=6800588318

同樣的方法? 拿好幾首歌來測試下 觀察哪些參數(shù)發(fā)生了變化

其實(shí)就只變換一個(gè)參數(shù)songmid ,filename參數(shù)值就是songmid前綴增加C400

構(gòu)造通配表達(dá)式

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&cid=205361747&songmid=%s&filename=C400%s.m4a&guid=6800588318' % (? media_mid, media_mid)

midia_mid從何而來? 之前不是找過歌曲的詳細(xì)信息 這里什么沒有啊? 果然在里面 獲取即可

總結(jié)下 就是先獲得media_mid 構(gòu)造一個(gè)url 得到vkey 再使用vkey構(gòu)造第二個(gè)url 即可獲取音頻文件的源地址了

PS:第二個(gè)url不要像之前操作一樣 再刪掉沒用的參數(shù) 力求精簡 這里實(shí)測遇到一個(gè)小坑

? ? ? ? 測試的時(shí)候 確實(shí)刪掉了uin和fromtag這兩參數(shù) 網(wǎng)址是能打開播放的 但是爬蟲requests的時(shí)候 下載過來 音頻已損壞 無法播放? 懷疑自己 懷疑人生 最后參數(shù)不刪除 放回去 終于下載的音頻能播放

5.最后寫個(gè)run函數(shù) 就可以哪首想聽 搜哪首

PS:細(xì)節(jié) 如果歌曲已下架 返回的音頻文件的vkey是NULL 所以要加一個(gè)判斷 如果vkey是null的話 就不用構(gòu)造url了? 如果vkey是null不做判斷的話 會(huì)繼續(xù)構(gòu)造下載url 而這個(gè)url里的vkey是null 下載過來 啥的沒有

END

Github源碼在這里

最后就是愉快的 哪首想聽 搜哪首 下哪首

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,201評(píng)論 3 119
  • 每一個(gè)喜歡籃球的姑娘骨子里都藏有滿腔的熱血。 周末抽出寶貴的時(shí)間看完一場NBA,頓覺滿足,全身都充滿了...
    孤影追夢_54061閱讀 534評(píng)論 0 0
  • 十月想改變自己的命運(yùn)。 小時(shí)候,家里有很窮的一段時(shí)間,更重要的,是經(jīng)濟(jì)條件改善后,父母依然舍不得。所以十月深刻的記...
    驕傲又可愛的貓閱讀 279評(píng)論 0 0
  • 01 這個(gè)周末,自己無論是在家里窩著,還是出去跑步,逛動(dòng)物園,心里都有心事。很重。 拋棄一切來到這個(gè)單位,眼瞅著六...
    書蟲小言閱讀 434評(píng)論 0 0
  • 2018.2.3 星期天 很多人他的愿望不能達(dá)成的一個(gè)很重要的秘密就在于它的愿和信不契合,就是你的信念系統(tǒng)和你的...
    諾曼藝術(shù)磚閱讀 105評(píng)論 0 0

友情鏈接更多精彩內(nèi)容