1. 程式人生 > >爬取網易雲音樂“三部曲”(二):獲取網易雲音樂歌手歌詞!

爬取網易雲音樂“三部曲”(二):獲取網易雲音樂歌手歌詞!

上一篇文章爬取了歌手的姓名和歌手的 id ,這篇文章根據上篇爬取的歌手 id 來直接下載對應歌手的歌詞。這些我其實可以寫成一個大專案,把這個大專案拆成小專案一來方便大家的理解,二來小專案都會了的話,拼在一起就是一個完整的專案了。

上篇文章沒學會的也不要緊,私信小編可以獲取上次的爬取結果 csv 檔案,檔案裡有歌手名字和歌手 id。

好了,先看看爬取歌詞的結果,我本來打算輸入的是張學友的id:6460,只是手不自覺的輸入了美女張韶涵的 id:10562,哎呀!既然輸錯了就將錯就錯吧,我就她爬取了熱門歌曲 50 首的歌詞。

專案環境:

語言:Python

工具:Pycharm

導包:

requests:根據 url 獲取頁面原始碼。

BeautifulSoup:解析提取原始碼。

程式結構:

程式由六部分組成:

get_html():提取頁面原始碼

get_top50():提取歌手的歌曲資訊。

get_lyrics():提取歌曲的歌詞。

save2txt():把歌詞儲存為 txt 檔案。

main:主函式。

解析頁面:

這個是爬蟲第一步了,注意下代理 ip 的設定,防止自己的 ip 被封,如果爬蟲資料量大的話,建議在主函式中加入等待時間,這樣也不會給爬取目標的伺服器增加壓力,就會減少被封的風險了。

這個函式的作用是返回熱門歌曲頁面的原始碼檔案,之前也寫過一篇文章,不過用的是 selenium 庫,selenium 庫爬取比較慢,這次換一種思路,用requests 庫請求。 url 是根據上篇文章獲取的 id 拼接起來的,但是頁面這個 url 是個假的 url ,用假的 url 提取不了頁面原始碼。後來查了下網易雲音樂的 api,發現真實的 url 沒有 #,去掉這個多餘的 # 加上對應歌手 id 即可,這個 url 我放在主函數了。

獲取歌手的歌曲資訊:

通過 get_html(url) 函式提取的原始碼提取出包含歌曲名稱和歌曲 id,這個選擇器標籤藏得很深,我是把 soup 先打印出來,找出第一首歌的位置,往前查詢標籤,分析出選擇器為 .f-hide #song-list-pre-cache a,再對提取的元素進行處理,去除不需要的資訊,保留有效資訊並以 zip 形式一一對應返回。

獲取歌詞:

通過上個函式獲取的歌曲 id 獲取對應的歌詞,這個地方如果直接用頁面上的 url 也獲取不到內容,也只能通過他們提供的 api 連結拼接上歌曲 id 即可。解析後用 json.loads() 解碼 python json 格式,提取歌詞資訊,然後用 re.sub() 來實現字串替換處理的功能,處理掉前面我們不需要的元素。

儲存資料:

直接用歌名作為名稱儲存為純文字檔案,如果要儲存在特定目錄,需要自己提前新建好此目錄。

執行 main 函式:

最後執行 main 函式,輸入需要爬取歌手 id,執行,每獲取一首歌歌詞時我設定了一個等待時間,這也是為了防止 ip 被封的一種小策略。

好了,以後想看哪位歌手的熱門歌曲的歌詞的話找到 TA 的 id,執行此文的程式碼,就能下載歌詞了。以後去看演唱會,再也不用愁因忘記歌詞而不能和歌手一起嗨歌了。好了,爬完美女的該把正事幹完了,趕緊把歌神的歌爬一下,免得又被說假粉絲了。

以上就是本文的內容,未完待續。。。

本文來自網路,如有侵權,請聯絡小編刪除!