此文首發於公眾號「Python知識圈」,歡迎直接去公眾號看
“ 閱讀文字大概需要 3.1 分鐘
上一篇文章爬取了歌手的姓名和歌手的 id ,這篇文章根據上篇爬取的歌手 id 來直接下載對應歌手的歌詞。這些我其實可以寫成一個大專案,把這個大專案拆成小專案一來方便大家的理解,二來小專案都會了的話,拼在一起就是一個完整的專案了。
上篇文章沒學會的也不要緊,公眾號回覆「歌手」可以獲取上次的爬取結果 csv 檔案,檔案裡有歌手名字和歌手 id。
好了,先看看爬取歌詞的結果,我輸入的是張韶涵的 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,執行此文的程式碼,就能下載歌詞了。以後去看演唱會,再也不用愁因忘記歌詞而不能和歌手一起嗨歌了。
公眾號回覆「歌詞」獲取原始碼。
只有歌詞怎麼行,下篇文章教大家怎麼下載音樂。
此文章對你有點幫忙的話希望大家能多給點支援,該關注關注,該點贊點贊,該轉發轉發,有什麼問題歡迎在後臺聯系我,也可以在後臺加入技術交流群,群裡有大神,可以一起交流學習。
推薦閱讀
這篇文章帶你輕鬆入門 python 爬蟲
Python 爬蟲獲取網易雲音樂歌手資訊
讓程式碼和邁克傑克遜一起跳舞
公眾號「Python知識圈」
長按二維碼關注我們
本公眾號專注:
1.python 技術分享
2.python 爬蟲分享
3.資料、工具共享
歡迎關注我們,一起成長!