python下载网页歌词_利用Python网络爬虫抓取网易云音乐歌词
今天小編給大家分享網(wǎng)易云音樂歌詞爬取方法。
本文的總體思路如下:
找到正確的URL,獲取源碼;
利用bs4解析源碼,獲取歌曲名和歌曲ID;
調(diào)用網(wǎng)易云歌曲API,獲取歌詞;
將歌詞寫入文件,并存入本地。
本文的目的是獲取網(wǎng)易云音樂的歌詞,并將歌詞存入到本地文件。整體的效果圖如下所示:
趙雷的歌曲
本文以民謠歌神趙雷為數(shù)據(jù)采集對象,專門采集他的歌曲歌詞,其他歌手的歌詞采集方式可以類推,下圖展示的是《成都》歌詞。
趙雷歌曲---《成都》
一般來說,網(wǎng)頁上顯示的URL就可以寫在程序中,運行程序之后就可以采集到我們想要的網(wǎng)頁源碼。But在網(wǎng)易云音樂網(wǎng)站中,這條路行不通,因為網(wǎng)頁中的URL是個假URL,真實的URL中是沒有#號的。廢話不多說,直接上代碼。
獲取網(wǎng)頁源碼
本文利用requests、bs4、json和re模塊來采集網(wǎng)易云音樂歌詞,記得在程序中添加headers和反盜鏈referer以模擬瀏覽器,防止被網(wǎng)站拒絕訪問。這里的get_html方法專門用于獲取源碼,通常我們也要做異常處理,未雨綢繆。
獲取到網(wǎng)頁源碼之后,分析源碼,發(fā)現(xiàn)歌曲的名字和ID藏的很深,縱里尋她千百度,發(fā)現(xiàn)她在源碼的294行,藏在
- 標(biāo)簽下,如下圖所示:
歌曲名和ID存在的位置
接下來我們利用美麗的湯來獲取目標(biāo)信息,直接上代碼,如下圖:
獲取歌曲名和ID
此處要注意獲取ID的時候需要對link進行切片處理,得到的數(shù)字便是歌曲的ID;另外,歌曲名是通過get_text()方法獲取到的,最后利用zip函數(shù)將歌曲名和ID一一對應(yīng)并進行返回。
得到ID之后便可以進入到內(nèi)頁獲取歌詞了,但是URL還是不給力,如下圖:
歌詞的URL
雖然我們可以明白的看到網(wǎng)頁上的白紙黑字呈現(xiàn)的歌詞信息,但是我們在該URL下卻無法獲取到歌詞信息。小編通過抓包,找到了歌詞的URL,發(fā)現(xiàn)其是POST請求還有一大堆看不懂的data,總之這個URL是不能為我們效力。那該點解呢?
莫慌,小編找到了網(wǎng)易云音樂的API,只要把歌曲的ID放在API鏈接上便可以獲取到歌詞了,代碼如下:
調(diào)用網(wǎng)易云API并解析歌詞
在API中歌詞信息是以json格式加載的,所以需要利用json將其進行序列化解析出來,并配合正則表達式進行清洗歌詞,如果不用正則表達式進行清洗的話,得到原始的數(shù)據(jù)如下所示(此處以趙雷的歌曲《成都》為例):
原始數(shù)據(jù)
很明顯歌詞前面有歌詞呈現(xiàn)的時間,對于我們來說其屬于雜質(zhì)信息,因此需要利用正則表達式進行匹配。誠然,正則表達式并不是唯一的方法,小伙伴們也可以采取切片的方式或者其他方法進行數(shù)據(jù)清洗,在此就不贅述了。
得到歌詞之后便將其寫入到文件中去,并存入到本地文件中,代碼如下:
寫入文件和程序主體部分
現(xiàn)在只要我們運行程序,輸入歌手的ID之后,程序?qū)⒆詣影言摳枋值乃枨母柙~抓取下來,并存到本地中。如本例中趙雷的ID是6731,輸入數(shù)字6731之后,趙雷的歌詞將會被抓取到,如下圖所示:
程序運行結(jié)果
之后我們就可以在腳本程序的同一目錄下找到生成的歌詞文本,歌詞就被順利的爬取下來了。
相信大家對網(wǎng)易云歌詞爬取已經(jīng)有了一定的認(rèn)識了,不過easier said than down,小編建議大家動手親自敲一下代碼,在實踐中你會學(xué)的更快,學(xué)的更多的。
這篇文章教會大家如何采集網(wǎng)易云歌詞,那網(wǎng)易云歌曲如何采集呢?且聽小編下回分解~~~
總結(jié)
以上是生活随笔為你收集整理的python下载网页歌词_利用Python网络爬虫抓取网易云音乐歌词的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 建议去华为
- 下一篇: 这种扯淡的嵌入式项目,尽量不要碰
