利用Python網絡爬蟲抓取網易雲音樂歌詞

基於Python網易雲音樂歌詞爬取

網易雲音樂html

前幾天小編給你們分享了數據可視化分析,在文尾說起了網易雲音樂歌詞爬取,今天小編給你們分享網易雲音樂歌詞爬取方法。正則表達式

本文的整體思路以下:json

  1. 找到正確的URL,獲取源碼;瀏覽器

  2. 利用bs4解析源碼,獲取歌曲名和歌曲ID;ide

  3. 調用網易雲歌曲API,獲取歌詞;函數

  4. 將歌詞寫入文件,並存入本地。網站

本文的目的是獲取網易雲音樂的歌詞,並將歌詞存入到本地文件。總體的效果圖以下所示:3d

基於Python網易雲音樂歌詞爬取

趙雷的歌曲cdn

本文以民謠歌神趙雷爲數據採集對象,專門採集他的歌曲歌詞,其餘歌手的歌詞采集方式能夠類推,下圖展現的是《成都》歌詞。htm

基於Python網易雲音樂歌詞爬取

趙雷歌曲---《成都》

通常來講,網頁上顯示的URL就能夠寫在程序中,運行程序以後就能夠採集到咱們想要的網頁源碼。But在網易雲音樂網站中,這條路行不通,由於網頁中的URL是個假URL,真實的URL中是沒有#號的。廢話很少說,直接上代碼。

基於Python網易雲音樂歌詞爬取

獲取網頁源碼

本文利用requests、bs四、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網易雲音樂歌詞爬取

調用網易雲API並解析歌詞

在API中歌詞信息是以json格式加載的,因此須要利用json將其進行序列化解析出來,並配合正則表達式進行清洗歌詞,若是不用正則表達式進行清洗的話,獲得原始的數據以下所示(此處以趙雷的歌曲《成都》爲例):

基於Python網易雲音樂歌詞爬取

原始數據

很明顯歌詞前面有歌詞呈現的時間,對於咱們來講其屬於雜質信息,所以須要利用正則表達式進行匹配。誠然,正則表達式並非惟一的方法,小夥伴們也能夠採起切片的方式或者其餘方法進行數據清洗,在此就不贅述了。

獲得歌詞以後便將其寫入到文件中去,並存入到本地文件中,代碼以下:

基於Python網易雲音樂歌詞爬取

寫入文件和程序主體部分

如今只要咱們運行程序,輸入歌手的ID以後,程序將自動把該歌手的所唱歌曲的歌詞抓取下來,並存到本地中。如本例中趙雷的ID是6731,輸入數字6731以後,趙雷的歌詞將會被抓取到,以下圖所示:

基於Python網易雲音樂歌詞爬取

程序運行結果

以後咱們就能夠在腳本程序的同一目錄下找到生成的歌詞文本,歌詞就被順利的爬取下來了。

相信你們對網易雲歌詞爬取已經有了必定的認識了,不過easier said than down,小編建議你們動手親自敲一下代碼,在實踐中你會學的更快,學的更多的。

這篇文章教會你們如何採集網易雲歌詞,那網易雲歌曲如何採集呢?快戳小編以前的文章吧~~

相關文章
相關標籤/搜索