標籤:網易雲歌詞 Python網路爬蟲 網路爬蟲
前幾天小編給大家分享了資料視覺效果分析,在文尾提及了網易雲音樂歌詞爬取,今天小編給大家分享網易雲音樂歌詞爬取方法。
本文的總體思路如下:
找到正確的URL,擷取源碼;
利用bs4解析源碼,擷取歌曲名和歌曲ID;
調用網易雲歌曲API,擷取歌詞;
將歌詞寫入檔案,並存入本地。
本文的目的是擷取網易雲音樂的歌詞,並將歌詞存入到本地檔案。整體的如下所示:
基於Python網易雲音樂歌詞爬取
趙雷的歌曲
本文以民謠歌神趙雷為資料擷取對象,專門採集他的歌曲歌詞,其他歌手的歌詞採集方式可以類推,展示的是《成都》歌詞。
基於Python網易雲音樂歌詞爬取
趙雷歌曲---《成都》
一般來說,網頁上顯示的URL就可以寫在程式中,運行程式之後就可以採集到我們想要的網頁源碼。But在網易雲音樂網站中,這條路行不通,因為網頁中的URL是個假URL,真實的URL中是沒有#號的。廢話不多說,直接上代碼。
基於Python網易雲音樂歌詞爬取
擷取網頁源碼
本文利用requests、bs4、json和re模組來採集網易雲音樂歌詞,記得在程式中添加headers和反盜鏈referer以類比瀏覽器,防止被網站拒絕訪問。這裡的get_html方法專門用於擷取源碼,通常我們也要做異常處理,未雨綢繆。
擷取到網頁源碼之後,分析源碼,發現歌曲的名字和ID藏的很深,縱裡尋她千百度,發現她在源碼的294行,藏在<ul class="f-hide">標籤下,如所示:
基於Python網易雲音樂歌詞爬取
歌曲名和ID存在的位置
接下來我們利用美麗的湯來擷取目標資訊,直接上代碼,如:
基於Python網易雲音樂歌詞爬取
擷取歌曲名和ID
此處要注意擷取ID的時候需要對link進行切片處理,得到的數字便是歌曲的ID;另外,歌曲名是通過get_text()方法擷取到的,最後利用zip函數將歌曲名和ID一一對應並進行返回。
得到ID之後便可以進入到內頁擷取歌詞了,但是URL還是不給力,如:
基於Python網易雲音樂歌詞爬取
歌詞的URL
雖然我們可以明白的看到網頁上的白紙黑字呈現的歌詞資訊,但是我們在該URL下卻無法擷取到歌詞資訊。小編通過抓包,找到了歌詞的URL,發現其是POST請求還有一大堆看不懂的data,總之這個URL是不能為我們效力。那該點解呢?
莫慌,小編找到了網易雲音樂的API,只要把歌曲的ID放在API連結上便可以擷取到歌詞了,代碼如下:
基於Python網易雲音樂歌詞爬取
調用網易Cloud API並解析歌詞
在API中歌詞資訊是以json格式載入的,所以需要利用json將其進行序列化解析出來,並配合Regex進行清洗歌詞,如果不用Regex進行清洗的話,得到原始的資料如下所示(此處以趙雷的歌曲《成都》為例):
基於Python網易雲音樂歌詞爬取
未經處理資料
很明顯歌詞前面有歌詞呈現的時間,對於我們來說其屬於雜質資訊,因此需要利用Regex進行匹配。誠然,Regex並不是唯一的方法,小夥伴們也可以採取切片的方式或者其他方法進行資料清洗,在此就不贅述了。
得到歌詞之後便將其寫入到檔案中去,並存入到本地檔案中,代碼如下:
基於Python網易雲音樂歌詞爬取
寫入檔案和程式主體部分
現在只要我們運行程式,輸入歌手的ID之後,程式將自動把該歌手的所唱歌曲的歌詞抓取下來,並存到本地中。如本例中趙雷的ID是6731,輸入數字6731之後,趙雷的歌詞將會被抓取到,如所示:
基於Python網易雲音樂歌詞爬取
程式運行結果
之後我們就可以在指令碼程式的同一目錄下找到產生的歌詞文本,歌詞就被順利的爬取下來了。
相信大家對網易雲歌詞爬取已經有了一定的認識了,不過easier said than down,小編建議大家動手親自敲一下代碼,在實踐中你會學的更快,學的更多的。
這篇文章教會大家如何採集網易雲歌詞,那網易雲歌曲如何採集呢?且聽小編下回分解~~~
如何用Python網路爬蟲爬取網易雲音樂歌詞