小猿圈分享如何利用python網(wǎng)絡(luò)爬蟲獲取網(wǎng)易云歌詞

今天小猿圈給大家分享網(wǎng)易云音樂歌詞爬取方法。

本文的總體思路如下:

找到正確的URL,獲取源碼;

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

調(diào)用網(wǎng)易云歌曲API,獲取歌詞;

將歌詞寫入文件,并存入本地。

本文的目的是獲取網(wǎng)易云音樂的歌詞,并將歌詞存入到本地文件。整體的效果圖如下所示:

趙雷的歌曲

本文以民謠歌神趙雷為數(shù)據(jù)采集對(duì)象,專門采集他的歌曲歌詞,其他歌手的歌詞采集方式可以類推,下圖展示的是《成都》歌詞。

趙雷歌曲---《成都》

一般來(lái)說(shuō),網(wǎng)頁(yè)上顯示的URL就可以寫在程序中,運(yùn)行程序之后就可以采集到我們想要的網(wǎng)頁(yè)源碼。But在網(wǎng)易云音樂網(wǎng)站中,這條路行不通,因?yàn)榫W(wǎng)頁(yè)中的URL是個(gè)假URL,真實(shí)的URL中是沒有#號(hào)的。廢話不多說(shuō),直接上代碼。

獲取網(wǎng)頁(yè)源碼

本文利用requests、bs4、json和re模塊來(lái)采集網(wǎng)易云音樂歌詞,記得在程序中添加headers和反盜鏈referer以模擬瀏覽器,防止被網(wǎng)站拒絕訪問(wèn)。這里的get_html方法專門用于獲取源碼,通常我們也要做異常處理,未雨綢繆。

獲取到網(wǎng)頁(yè)源碼之后,分析源碼,發(fā)現(xiàn)歌曲的名字和ID藏的很深,縱里尋她千百度,發(fā)現(xiàn)她在源碼的294行,藏在

    標(biāo)簽下,如下圖所示:

歌曲名和ID存在的位置

接下來(lái)我們利用美麗的湯來(lái)獲取目標(biāo)信息,直接上代碼,如下圖:

獲取歌曲名和ID

此處要注意獲取ID的時(shí)候需要對(duì)link進(jìn)行切片處理,得到的數(shù)字便是歌曲的ID;另外,歌曲名是通過(guò)get_text()方法獲取到的,最后利用zip函數(shù)將歌曲名和ID一一對(duì)應(yīng)并進(jìn)行返回。

得到ID之后便可以進(jìn)入到內(nèi)頁(yè)獲取歌詞了,但是URL還是不給力,如下圖:

歌詞的URL

雖然我們可以明白的看到網(wǎng)頁(yè)上的白紙黑字呈現(xiàn)的歌詞信息,但是我們?cè)谠揢RL下卻無(wú)法獲取到歌詞信息。小編通過(guò)抓包,找到了歌詞的URL,發(fā)現(xiàn)其是POST請(qǐng)求還有一大堆看不懂的data,總之這個(gè)URL是不能為我們效力。那該點(diǎn)解呢?

莫慌,小編找到了網(wǎng)易云音樂的API,只要把歌曲的ID放在API鏈接上便可以獲取到歌詞了,代碼如下:

調(diào)用網(wǎng)易云API并解析歌詞

在API中歌詞信息是以json格式加載的,所以需要利用json將其進(jìn)行序列化解析出來(lái),并配合正則表達(dá)式進(jìn)行清洗歌詞,如果不用正則表達(dá)式進(jìn)行清洗的話,得到原始的數(shù)據(jù)如下所示(此處以趙雷的歌曲《成都》為例):

原始數(shù)據(jù)

很明顯歌詞前面有歌詞呈現(xiàn)的時(shí)間,對(duì)于我們來(lái)說(shuō)其屬于雜質(zhì)信息,因此需要利用正則表達(dá)式進(jìn)行匹配。誠(chéng)然,正則表達(dá)式并不是唯一的方法,小伙伴們也可以采取切片的方式或者其他方法進(jìn)行數(shù)據(jù)清洗,在此就不贅述了。

得到歌詞之后便將其寫入到文件中去,并存入到本地文件中,代碼如下:

寫入文件和程序主體部分

現(xiàn)在只要我們運(yùn)行程序,輸入歌手的ID之后,程序?qū)⒆詣?dòng)把該歌手的所唱歌曲的歌詞抓取下來(lái),并存到本地中。如本例中趙雷的ID是6731,輸入數(shù)字6731之后,趙雷的歌詞將會(huì)被抓取到,如下圖所示:

程序運(yùn)行結(jié)果

之后我們就可以在腳本程序的同一目錄下找到生成的歌詞文本,歌詞就被順利的爬取下來(lái)了。

相信大家對(duì)網(wǎng)易云歌詞爬取已經(jīng)有了一定的認(rèn)識(shí)了,不過(guò)easier said than down,小編建議大家動(dòng)手親自敲一下代碼,在實(shí)踐中你會(huì)學(xué)的更快,學(xué)的更多的。

這篇文章教會(huì)大家如何采集網(wǎng)易云歌詞,那網(wǎng)易云歌曲如何采集呢?且聽小編下回分解~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容