QQ音樂爬蟲程序詳細解析(一)——歌曲下載模塊


  • 前言

 

       完整的QQ音樂爬蟲程序分兩個部分: 歌曲下載模塊  +  歌曲詳細信息提取模塊

    

  • 歌曲下載模塊構建

 

網頁構成分析:

 

1)找到QQ音樂的下載網址

    

      播放頁面中,刷新F5,查看文件類型,有個type 為媒體文件media  且比較大 幾M,點進去看;

 

 

 

 

然后就找到了本歌曲的下載網址:

 

 

 

 

 

2)分析網址:

 

取兩首歌曲的網址對比:

 

http://dl.stream.qqmusic.qq.com/C400003YDLNN4EIffX.m4a?vkey=A308D712991EBD1D53F9B5838A4C3701CB555FA14CF338E75815DA7464FA79167A44352CD7682EAC7ABBD29CFA2A27BEBA9C8273E8E8CB00&guid=6964837424&uin=0&fromtag=66

 

 

 

http://dl.stream.qqmusic.qq.com/C400001O6xe10VDdA5.m4a?vkey=2B345A6EFF534205F7D3FC37CB6526A99172E2F0D5AD657103EAA023A9F3F7EB035D12C510CA67897F255C31A9CD6911B6AF761CD0619226&guid=6964837424&uin=247990761&fromtag=66

 

 

規律:

http://dl.stream.qqmusic.qq.com/(fileindex.m4a?(vkey=?)guid=6964837424&uin=247990761&fromtag=66

 

需要提前歌曲鏈接得參數:

  • fileindex
  • vkey

 

guid/uin/fromtag每首歌都是一樣的

 

然后任務變成找到提前歌曲參數的鏈接,提取信息;

 

3)提取生成歌曲鏈接所需參數:

   

   先記住我們要找的東西:

        fileindex 例如  C400003YDLNN4EIffX

        vkey        例如vkey=A308D712991EBD1D53F9B5838A4C3701CB555FA14CF338E75815DA7464FA79167A44352CD7682EAC7ABBD29CFA2A27BEBA9C8273E8E8CB00

   

    在歌單頁面,進行元素審查,我們都知道QQ音樂采用的是JSON動態返回的方法,所以去JSON信息中去找這個歌單下歌曲的信息,看能不能有所收獲:

            

 

 

發現這個文件下有song_list ,剛好J記錄這一頁歌單所有歌曲的一些信息:

 

 

 

進一步查看:比如第一首歌曲

 

 

 

 

 

好像看到一些有意思的東西,albummid 格式有點像我們要的fileindex? 對不對? 驗證一下:

 

把這首哥的地址查看下:

 

http://dl.stream.qqmusic.qq.com/C400002kpGuj0eD0SW.m4a?vkey=DDE737BFC8E7657EFD5370BE030349BE58436CF05659F534036EB9BD4CEA58555B39B49AEF245DB76C7CBD27F4D1B59B92D1DEA6159A1C8D&guid=6964837424&uin=247990761&fromtag=66

 

albummid的值格式有點像 fileindex ,但是值!= C400002kpGuj0eD0SW 所以,應該不是我們要找的;

ctrl+F5  元素分析中搜索 C400002kpGuj0eD0SW. 

 

 

 

 

 

居然沒有找到!!  難道是什么地方搞錯了??仔細一看,songmid=2kpGuj0eD0SW 這個匹配 ,再看 規律是 C4000+songmid -> FILEINDEX:

 

修改下歌曲URL的規律:

http://dl.stream.qqmusic.qq.com/C4000(+songmid).m4a(+vkey=xxxx)guid=6964837424&uin=247990761&fromtag=66

 

所以通過提取fcg_ucc _xxx  這個文件的鏈接下的內容,可以得到歌單下所有歌曲的 songmid;(敲黑板,畫重點)

 

繼續找vkey ing...........................

 

在歌單頁面的json信息和XHR中都找不到vkey.....

 

點擊進入歌曲頁面,元素審查查找:

 

找到了對應歌曲的vkey的內容:

 

 

 

 

9528911464323242

 

對應的URL鏈接:

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&jsonpCallback=MusicJsonCallback8283129727027805&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback8283129727027805&uin=247990761&songmid=002kpGuj0eD0SW&filename=C400002kpGuj0eD0SW.m4a&guid=6964837424

 

 從這個鏈接可以提取cool的vkey值;but 怎么提取整個歌單下面所有歌曲的vkey值呢?....................

 

分析上面這個鏈接個規律:(還是用對比法吧!)

 

另一首歌的:

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&jsonpCallback=MusicJsonCallback14456243607230945&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback14456243607230945&uin=247990761&songmid=001O6xe10VDdA5&filename=C400001O6xe10VDdA5.m4a&guid=6964837424

 

特異性的參數標注如下:

 

 

 

 

建立一個通用的可以提取所有歌 vkey的URL地址公式:

 

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&jsonpCallback={0}&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&callback={1}&uin=247990761&songmid={2}&filename=C40000{3}.m4a&guid=6964837424.format(jsonpCallback,callback,songmid,songmid)

 

目前需要提取得參數:jsonpCallback,callback  ...............

 jsonpCallback 和callback  還有可以簡化的規律,他們都相同,且遵循:

    ”MusicJsonCallback”+ “一個相同的ID值”

 

現在需要找到這個ID值: .......

找了一圈沒有找到,怎么辦,草泥馬飛過~~~~

 

難道jsonpCallback,callback參數可有可無!!??

 

試試下面的網址,刪除了jsonpCallback,callback

 

 

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&uin=247990761&songmid=001O6xe10VDdA5&filename=C400001O6xe10VDdA5.m4a&guid=6964837424

 

居然訪問成功!!!再次一萬匹草泥馬飛過~~~~

 

自此,大功告成,修改前面有歌 通用vkey的URL地址公式:

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&&uin=247990761&songmid={0}&filename=C40000{1}.m4a&guid=6964837424.format(songmid,songmid)

 

總結:

 

1)歌曲下載通用地址:"http://dl.stream.qqmusic.qq.com/C400{0}.m4a?vkey={1}guid=6964837424&uin=247990761&fromtag=66".format(songmid,vkey)

 

(2)songmid 在歌單頁面,json中可以得到當前頁面所有歌的songmid;

 

(3)vkey 的提取URL地址 :

 

 “https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&&uin=247990761&songmid={0}&filename=C400{1}.m4a&guid=6964837424”.format(songmid,songmid)

 

4)歌曲對應唯一的songmid  ->  vkey的地址  -> 唯一的vkey  -> 得到歌單里每一首歌曲下載地址

 

  歌曲下載的地址爬取完成!!

 

歌曲下載部分示例代碼:

 

download_music只負責單個歌曲下載功能;輸入一個對應歌曲的songmid (songmid在歌曲詳細信息函數提取,並將多個music的信息分別送入download_music),得到對應歌曲的下載文件輸出;

 

 

 

 

 
 
 
 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM