tft每日頭條

 > 生活

 > 網易雲音樂導出本地音樂

網易雲音樂導出本地音樂

生活 更新时间:2024-09-29 14:24:51
動機是啥

随着之前版權大戰的落幕,網易雲音樂坐擁最忠實的一批用戶,但是卻在版權上缺失了一大塊,帶給用戶很不好的使用體驗。于是很多人紛紛轉戰QQ音樂等其他競品。

本來我也就是偶爾聽個響,對于聽歌沒有太大的需求,再一方面也是情懷,所以沒有積極擁抱QQ音樂。但是實在架不住每次在網易雲音樂要聽啥歌沒有啥,潛移默化地也就轉移到了QQ音樂上。

到了QQ音樂一看,诶嘿,這不行啊,我辛辛苦苦積攢的家底兒都沒了嘛這不是?就光秃秃的“我喜歡”,還大小沒幾首歌。這讓習慣了網易雲日推的我怎麼能習慣啊……

好了,以上都是前情提要。

實際上這篇文章的寫作動機就是要把網易雲音樂的歌單導入到QQ音樂中去。

本身QQ音樂提供了一個導入網易雲音樂歌單的小公舉,啊不,咳咳,是小工具。但是奈何出于不可名狀的原因,這個工具常年出于抽風狀态。其具體症狀見下圖:

網易雲音樂導出本地音樂(網易雲音樂導出歌單)1

于是乎,官方是靠不住的了。

大力水手曾經曰過:“靠山山倒,靠人人跑。隻有靠自己,最好。”自己動手,豐衣足食,現在這個社會誰還沒點兒技術了嗎?

選擇的方法

好吧我承認,我沒有技術……

網易雲音樂導出本地音樂(網易雲音樂導出歌單)2

那好家夥,直接用我們社會主義勞動人民的老朋友requests來獲取頁面信息,返回來的倒也說不上是亂碼,但就是沒有咱們真正需要的内容——歌曲名稱。

行吧,那我配置一下User-Agent。我去還是不行?

咋還出來了一個SSLError?這啥?

上網一查,還得手動關閉SSL證書驗證。行叭,走你~

啊不對,不登錄好像看不到完整的歌單?那就先登錄吧。登錄完好像還得在請求頭裡面加上用cookie來保持認證身份?……

不就是這麼一個頁面,要啥技術啊,看我暴力破拆。

開工

首先在頁面上點擊鼠标右鍵,選中“檢查”這一項;或者不點擊鼠标,直接按下快捷鍵Ctrl Shift I。會彈出Chrome浏覽器的控制台。此時找到其中的元素<table class="m-table ">,這個元素裡邊包含的就是我們想要的歌單了。

在這個标簽内部又分為兩大部分:<thead>和<tbody>。通過移動鼠标觀察頁面變化,可以發現<tbody>中的内容是主體。

再然後,輕易可以發現<tbody>中的每個子條目都對應于歌單中的一首歌:

網易雲音樂導出本地音樂(網易雲音樂導出歌單)3

抓住這個點就是一頓分析(瘋狂查找),一直找到最小的對應于歌曲名字的标簽:

網易雲音樂導出本地音樂(網易雲音樂導出歌單)4

行了,現在差不多可以開始編程了。

咱也不用假模假樣再去用requests一頓爬了,直接copy-paste搞腚,呸,搞定。

鼠标選中,右鍵點擊,依次選擇:

網易雲音樂導出本地音樂(網易雲音樂導出歌單)5

然後新建一個HTML文件,粘貼,保存,哈哈,數據爬下來啦~

請叫我人工全智能手動爬蟲工程師。

接下來再利用vscode的HTML格式化插件,把一行的HTML格式化一下,大概就長這樣了:

網易雲音樂導出本地音樂(網易雲音樂導出歌單)6

文件有了,那接下來就好辦了。

Python先把文件打開,把文件内容給讀取進來:

with open("test.html", "r", encoding="utf-8") as f: content = f.read()

此處f.read()返回一個由文本内容組成的字符串,我們使用BeautifulSoup來進行解析:

from bs4 import BeautifulSoup response = BeautifulSoup(content,'lxml')

仔細考察節點内容,會發現每首歌的名字都在一個特殊的标簽<b>中,并且隻在歌名處使用了這個标簽,因此我們可以直接調用find_all()方法來獲取相應節點:

results = response.find_all("b")

由于歌曲名字是以标簽<b>的屬性title形式存在的,因此我們可以通過節點直接獲取相應的屬性值:

for result in results: print(result['title']) # 笑紅塵 - (電影《東方不敗之風雲再起》主題曲) # 愛你在心口難開 # 得意的笑 # 寂寞在唱歌 # ...

最後,我們将得到的歌曲名字統一保存為一個名為“SongList.txt”的文本文件,導出歌單的工作就大功告成了。

with open("SongList.txt", "w ", encoding="utf-8") as f: f.writelines([result["title"] for result in results])

此時結果都擠成一堆,所以我們還需要為每一個歌名末尾手動添加一個換行符,最終程序如下:

from bs4 import BeautifulSoup with open("test.html", "r", encoding="utf-8") as f: content = f.read() response = BeautifulSoup(content,'lxml') results = response.find_all("b") with open("SongList.txt", "w ", encoding="utf-8") as f: f.writelines([result["title"] "\n" for result in results])

别看文章寫了這麼多,其實代碼非常之簡短(畢竟真正有難度的部分已經由資深人工全智能爬蟲工程師代勞了),歌單導出已經搞腚了。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved