一、問題描述:
本次爬取的對象是QQmusic,為自己后面做django音樂網站的開發獲取一些資源。
二、問題分析:
由於QQmusic和網易音樂的方式差不多,都是講歌曲信息放入到播放界面播放,在其他界面沒有media的資源,喜馬拉雅的則不是這樣的,可以參考我爬取喜馬拉雅的blog與代碼:https://www.cnblogs.com/future-dream/p/10347354.html。
1.由於上述原因,我們需要對網頁進行分析:
獲取歌曲菜單的id——>歌曲的所有id信息——>播放網站URL的構建,我們所有的一切都是為播放網站參數需要而努力,得到了對應的參數剩下的就很簡單。
(1)歌曲菜單界面
(2)歌曲id信息
(3)播放網站的解析
三、實施步驟:
爬蟲基本的思路都是倒序根據需要的信息一步一步往上推
1.播放界面的請求參數
(1)一個播放界面
(2)另一個播放界面
通過觀察我們可以看到,只有vkey參數不一樣,而我們的目的也是得到這個vkey參數,這樣可以完成對歌曲內容的獲取。
2.查看vkey所在的文件
(1)由於我們是在播放界面點出來的因此需要回到播放界面去查找信息,可以通過對id進行查詢,可以看到如圖灰色的響應,包含了所有關於歌曲信息的url信息。
(2)查看參數可以知道我們需要的參數,注意:第一個參數是可有可無的,因此就省去這個參數。
(3)對比參數,查看變量參數,可以看到只有songmid不一樣因此在解析的時候只需要songmid需要改變。
3.獲取songmid
(1)我們根據響應可以知道我們是通過歌單的信息獲取歌曲的列表,在通過歌曲的列表獲取歌曲的songmid。
(2)通過獲取的song_list獲取到songmid
(3)查看請求頭的信息,觀察變化的參數
1.一個請求頭的信息
2.另一個請求頭的信息
通過請求頭都分析我們只需要改變disstid的參數就可以獲取到所有的歌曲信息。
4.獲取disstid的信息
(1)首先查看disstid在那個文件中
(2)查看請求頭,其中rnd的信息可以不要為空就可以了。
(3)獲取disstid
通過倒推的方法,可以成功解析歌曲的信息,剩下的就是代碼實現。
四、成果展示與總結:
1.展示
2.總結
一步步分析,在解析vkey的時候第一個很奇怪的參數就可以省略,在進行爬蟲爬取的時候也要注意這些問題,有時候的參數是可以省略的,因此在構造請求信息的時候就可以省略
參數的信息,由於QQmusic采取的都是json格式的文件,所以在解析的時候比較簡單,也很快速,這也是結構化數據的信息的特點。
五、源碼: