Python3爬取全民k歌
環境 python3.5 + requests
1.通過歌曲主頁鏈接爬取
首先打開歌曲主頁,打開開發者工具(F12)。
選擇Network,點擊播放,會發現有一個請求返回的資源是媒體類型,點擊查看這個請求,發現是歌曲的鏈接地址,請求為get請求。
現在查看網頁源碼發現這個鏈接隱藏在網頁的JS腳本中,至此,我們只需要利用requests庫爬取歌曲的主頁,然后通過re模塊將我們需要的歌曲連接提取出來即可。
2.通過用戶主頁爬取
首先我們觀察用戶首頁,發現每次加載是8首歌曲,點擊查看更多時地址欄並沒有變化,可以判斷歌單信息通過Ajax請求。
查看Network,找到歌單信息的請求,發現是GET方式,返回的是json,包含歌曲的主要信息。所以我們代碼中通過修改get請求參數就可以獲取所有的歌曲信息。
觀察網頁源碼,發現歌曲鏈接是由https://node.kg.qq.com/play?s= + Shareid + &g_f=personal構成。
所以,我們通過歌曲首頁,然后通過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來判斷是否跳出循環。
獲取到數據后,我們通過re模塊來獲取我們需要的shareid以及歌曲的名字等等信息。
獲取了shareid后,我們就可以組建鏈接來下載歌曲了。