1. 程式人生 > >python3爬取全民K歌

python3爬取全民K歌

Python3爬取全民k歌

環境 python3.5 + requests

1.通過歌曲主頁連結爬取

首先開啟歌曲主頁,開啟開發者工具(F12)。
選擇Network,點選播放,會發現有一個請求返回的資源是媒體型別,點選檢視這個請求,發現是歌曲的連結地址,請求為get請求。
Aaron Swartz

現在檢視網頁原始碼發現這個連結隱藏在網頁的JS指令碼中,至此,我們只需要利用requests庫爬取歌曲的主頁,然後通過re模組將我們需要的歌曲連線提取出來即可。
Aaron Swartz

2.通過使用者主頁爬取

首先我們觀察使用者首頁,發現每次載入是8首歌曲,點選檢視更多時位址列並沒有變化,可以判斷歌單資訊通過Ajax請求。

檢視Network,找到歌單資訊的請求,發現是GET方式,返回的是json,包含歌曲的主要資訊。所以我們程式碼中通過修改get請求引數就可以獲取所有的歌曲資訊。
Aaron Swartz

Aaron Swartz

觀察網頁原始碼,發現歌曲連結是由https://node.kg.qq.com/play?s= + Shareid + &g_f=personal構成。
Aaron Swartz

Aaron Swartz

所以,我們通過歌曲首頁,然後通過GET請求獲取包含歌曲資訊的json資料,連結為https://node.kg.qq.com/cgi/fcgi-bin/kg_ugc_get_homepage,請求中有個share_uid,這個引數是使用者的ID,通過修改這個就可以獲取不同的使用者的歌曲了。
還有一個重要的引數是start,這個引數是使用者的歌單的頁數,依次+1就能獲取所有的歌曲資訊,當之後沒有更多的歌曲時,可以發現返回的json資料中data內的引數has_more = 0,所以在程式碼中通過判斷has_more來判斷是否跳出迴圈。

Aaron Swartz

獲取到資料後,我們通過re模組來獲取我們需要的shareid以及歌曲的名字等等資訊。

獲取了shareid後,我們就可以組建連結來下載歌曲了。

Aaron Swartz

程式碼地址:https://github.com/Mrliu8023/getquanmin