那些年,我們聽過的五月天——基于Python3爬取并下載網(wǎng)易云歌曲

引子:記得高中的時(shí)候,一位同桌是五月天的超級(jí)粉絲,一下課就大聲哼唱(絲毫不在意旁邊人的感受,哈哈),剛開始還挺煩的(我下課要趕緊補(bǔ)覺),后來也就慢慢的習(xí)慣了,以至于五月天的歌曲成為了記憶中青澀而又躁動(dòng)的青春的觸發(fā)器。剛好最近在學(xué)習(xí)Python3網(wǎng)絡(luò)爬蟲,如是想把網(wǎng)易云音樂上面的關(guān)于五月天的歌曲及歌詞給下載下來,下面將詳細(xì)的介紹操作過程。

1. 總體思路分析

在行動(dòng)之前,首先想象一下我們要將目標(biāo)歌曲及歌詞下載下來,需要經(jīng)過哪些步驟?

爬蟲思路

按照上面的大體思路,我們可以自定義函數(shù)模擬爬取過程。

2. 具體爬取步驟

2.1 獲取網(wǎng)頁

導(dǎo)入包
獲取網(wǎng)頁

我們使用的是requests庫來獲取網(wǎng)頁,其中請(qǐng)求頭head中的參數(shù)信息可以從網(wǎng)站上粘貼過來:

請(qǐng)求頭信息

可以看到這里面的請(qǐng)求頭參數(shù)中并沒有 ‘Host’ 的參數(shù)信息,因此在上面的自定義函數(shù)中可以不用這個(gè)參數(shù)。

2.2 網(wǎng)頁解析

接下來我們就可以用beautifulsoup來解析網(wǎng)頁了:

網(wǎng)頁解析

上面函數(shù)中find中要查找的內(nèi)容需要我們?nèi)庋蹚木W(wǎng)站源代碼中搜尋:

網(wǎng)易云音樂用戶界面
網(wǎng)頁源碼

從上面的觀察中我們可以發(fā)現(xiàn),我們需要獲取的歌曲信息都在源碼屬性 class='f-hide'的<ul>標(biāo)簽中,而后面的 herf='/song?id=55331024' 中的 id 信息則是每一首曲子的地址。根據(jù)這些信息再去理解我們上面寫的函數(shù)就比較清晰了。

2.3 信息提取

按照上面的寫法,獲取的信息里面還有很多我們不想要的雜質(zhì),因此為了獲取更純凈的歌詞信息,我們找到了網(wǎng)易云音樂的API,只要把歌曲的ID放在API鏈接上便可以獲取歌詞了。在API中歌詞信息是以json格式加載的,所以需要利用json將其進(jìn)行序列化解析出來,并配合正則表達(dá)式進(jìn)行清洗歌詞。具體代碼如下:

歌詞提取

這樣的話我們就能獲取每一首音樂的歌詞了。

2.4 歌詞存儲(chǔ)

接下來我們將剛剛提取的歌曲歌詞存儲(chǔ)在指定的文件夾中:

存儲(chǔ)歌詞

這一步比較簡單,需要強(qiáng)調(diào)的是文件的寫入格式,‘a(chǎn)’表示的是以追加方式打開一個(gè)文件。如果該文件已存在,文件指針將會(huì)放在文件結(jié)尾。也就是說,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,則創(chuàng)建新文件來寫入。

2.5 下載并存儲(chǔ)歌曲

除了下載歌詞外,我們還有一個(gè)任務(wù)就是要將曲子給下載下來:

下載并保存歌曲

這里面我們用到的是 urllib.request 版塊中的urlretrieve函數(shù),該函數(shù)的作用是將遠(yuǎn)程數(shù)據(jù)下載到本地。

2.6 主函數(shù)

以上,我們將主要的函數(shù)都完成了,接下來的工作便是將這些函數(shù)進(jìn)行組合已達(dá)到我們爬取的目的。

主函數(shù)

在主函數(shù)中,我們用到了異常處理機(jī)制,因?yàn)槲覀冊谂廊〉倪^程中發(fā)現(xiàn)有些歌曲的命名方式的問題導(dǎo)致存儲(chǔ)失敗,從而造成程序出現(xiàn)bug,這里截取的 FileNotFoundError 異常就是主要避免這種問題。

2.7 運(yùn)行結(jié)果

運(yùn)行以上所有的函數(shù),如果正常的話將會(huì)出現(xiàn)如下的結(jié)果:

運(yùn)行的結(jié)果

其中我們需要輸入歌手的 ID,這個(gè)可以在網(wǎng)易云音樂上查找出來。

然后,我們可以在本地的文件中找到兩個(gè)文件夾 "lyrics1"和"songs1",其中前者存放的是歌詞,后者存放的是曲子。我們分別打開看看:

爬取的歌詞
爬取的歌曲

接下來,我們可以好好的享受一下我們的勞動(dòng)成果了。

結(jié)語:越來越覺得通過這種輸出方式來學(xué)習(xí)是一種非常有效的方法,然后最重要的是能體會(huì)到快樂。希望本文能夠幫助到需要的人...

?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 申明:本文純屬原創(chuàng),有參考的地方都會(huì)在文中給出鏈接。如有轉(zhuǎn)載,需征求本人同意。 一、目標(biāo)網(wǎng)站介紹 網(wǎng)易云音樂是一款...
    偽文藝boy閱讀 20,809評(píng)論 3 18
  • 我有一個(gè)臭媽媽。 今天我在寫簡書前,對(duì)著墻打了一會(huì)兒乒乓球,媽媽就對(duì)我說:“以后簡書沒寫前,不許給我打乒乓球,我見...
    汪星球宏偉的宇宙閱讀 622評(píng)論 0 0
  • 001 寢室網(wǎng)不好,我靈光一現(xiàn)便說:“巴啦啦能量,聯(lián)網(wǎng)吧!” l便說:“古娜拉黑暗之神,斷網(wǎng)吧!”…… 我想說我到...
    軼呀軼閱讀 253評(píng)論 0 0
  • 天氣預(yù)報(bào)預(yù)報(bào)前天有大雪,結(jié)果一個(gè)城市的人都在等著聽雪落下的聲音。截止到今天下午,氣溫感覺已經(jīng)達(dá)到落雪的程度,...
    戒月半閱讀 216評(píng)論 0 0

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