如果你常听音乐的话,肯定绕不开网易云,作为一款有情怀的音乐 App,我对网易云也是喜爱有加。虽然说现在都已经是 5G 时代了,大家的手机流量都绰绰有余,网易云歌曲和歌词一起下载,但在线播放还是不如本地存着音乐文件靠谱,今天我们就用 Python 来一键下载网易云音乐乐库。
其实下载音乐不难,只需要获取到音乐文件播放的地址就可以通过文件流读取的方式直接下载下来。那么问题就转化为如何获取音乐文件的播放地址了。
榜单分析
我们可以打开网易云排行榜 ,仔细分析我们发现该网页左边一列全是排行榜,每个排行榜都对应这不同的排行榜 ID,具体 ID 是多少,直接调开开发者工具即可清晰的看到。
由上图我们可以看到榜单是放在一个 class=&39; 的 ul 列表里面的,所以只需要获取到该 ul 列表的 li 标签即可。而对于每一个 li 标签来说,其 data-res-id 属性则是榜单 id,而榜单名称则是属于该 li 标签下的 div 中 class=&39; 的 p 标签下的 a 标签的内容。因此我们获取到 li 标签的集合之后,遍历该集合依次取出榜单 id 和榜单名称即可。
于是我们有了下面的函数,获取所有的榜单,该函数返回值是一个字典,key 为 榜单 id,值为榜单名称。
1、打开电脑上的“网易云音乐”应用程序,在搜索框输入需要下载的歌曲,搜索结束之后鼠标左键点击下载按钮下载歌曲。2、歌曲下载结束之后,鼠标右击歌单中已经下载的歌曲,选择“打开文件所在目录”。3、打开歌曲文件所在目录之后。
url = &39;User-Agent&39;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/86.0.4240.111 Safari/537.36&34;//ul[@class=&39;]/li&39;{}{}&39;榜单 ID&39;榜单名称&39;./@data-res-id&34;./div/p[@class=&39;]/a/text()&39;{}{}'.format(id,name))return ans
歌曲分析
上面我们获取到了所有的榜单数据,那么针对单个榜单来说,就是要获取其下的所有歌曲了。
分析页面原属可知,歌曲列表是在一个 table 中的,但是通过 requests.get(url,headers=hd) 方式获取返回的网页文本内容的话,貌似是获取不到 table 元素的。于是我们将其返回值输出后做了仔细分析,发现歌曲是在 class=&34; 的 ul 标签中。与获取榜单类似,同样需要先获取所有的 li 标签,然后在逐个获取歌曲 id 和歌曲 name 就可以了。
01 首先点击网易云音乐,进入首页后选择歌曲。02 进入歌曲详细界面后,轻点屏幕进入歌词界面。
同样该函数返回一个字典,key 为歌曲 id,value 为歌曲名称。
下载歌曲
我们还需要一个下载歌曲的函数,该函数接收歌曲 id,然后以文件流的形式直接读取到本地。
题主,是lrc歌词噢,并没有nrc歌词的。首先打开手机文件夹音乐,然后长按这个app里面下载的音乐,选择看所在目录。或者直接搜索netase,属于网易的文件夹,Download,然后lyric(这个就是放歌词的)。不知道是什么歌的话可以先。
def down_song_by_song_id_name(id,name):if not os.path.exists(download_dir):os.mkdir(download_dir)url = &39;r = requests.get(url.format(id),headers=hd)is_fail = Falsetry:with open(download_dir + name + &39;,&39;) as f:f.write(r.content)except:is_fail = Truelogger.info(&34; % name)if (not is_fail):logger.info(&34; % name)
最后将所有的操作组合到 main 函数中,作为程序的入口函数。
def main():ids = get_topic_ids()while True:print(&39;)logger.info(&39;)logger.info(&39;)logger.info(&39;)id = input(&39;)if str(id) == &39;:breakelif str(id) == &39;:for id in ids:down_song_by_topic_id(id,ids[id])else:print(&39;)ans = get_topic_songs(id,ids[id])print(&39;)logger.info(&39;)logger.info(&39;)logger.info(&39;)id = input(&39;)if str(id) == &39;:breakelif id == &39;:down_song_by_topic_id(id,ans[id])else:down_song_by_song_id_name(id,ans[id])if __name__ == &34;:main()
总结
今天我们以网易云网页版为数据源来下载音乐文件,其中下载操作是最简单的,比较麻烦的是分析榜单 id 和获取榜单下的歌曲列表,但榜单下的歌曲列表其实远不止 10 条,而我们获取歌曲的函数 get_topic_songs 每次只可以获取 10 条歌曲,这是因为我们没有在 headers 添加 cookie 导致的,因为只有登录之后才会显示所有的歌曲。小伙伴们可以登录自己的账户然后添加 cookie 做下尝试。
1、首先要打开手机上的《网易云音乐》。2、登录上去之后,点击一首歌播放。3、进入播放界面后,点击一下手机屏幕,转换到歌词界面。4、然后长按屏幕上的歌词。5、把需要复制的歌词都勾选上。6、然后选择“分享歌词”。7。