利用 Python 一键下载网易云音乐 10W+ 乐库

article/2025/10/30 9:29:39

如果你常听音乐的话,肯定绕不开网易云,作为一款有情怀的音乐 App,我对网易云也是喜爱有加。虽然说现在都已经是 5G 时代了,大家的手机流量都绰绰有余,但在线播放还是不如本地存着音乐文件靠谱,今天我们就用 Python 来一键下载网易云音乐乐库。

先来看下最终的效果。

 

其实下载音乐不难,只需要获取到音乐文件播放的地址就可以通过文件流读取的方式直接下载下来。那么问题就转化为如何获取音乐文件的播放地址了。

榜单分析

我们可以打开网易云排行榜 https://music.163.com/#/discover/toplist?id=19723756 ,仔细分析我们发现该网页左边一列全是排行榜,每个排行榜都对应这不同的排行榜 ID,具体 ID 是多少,直接调开开发者工具即可清晰的看到。

由上图我们可以看到榜单是放在一个 class='f-cb' 的 ul 列表里面的,所以只需要获取到该 ul 列表的 li 标签即可。而对于每一个 li 标签来说,其 data-res-id 属性则是榜单 id,而榜单名称则是属于该 li 标签下的 div 中 class='name' 的 p 标签下的 a 标签的内容。因此我们获取到 li 标签的集合之后,遍历该集合依次取出榜单 id 和榜单名称即可。

于是我们有了下面的函数,获取所有的榜单,该函数返回值是一个字典,key 为 榜单 id,值为榜单名称。

url = 'https://music.163.com/discover/toplist'
hd = {'User-Agent': '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'
}def get_topic_ids():r = requests.get(url, headers=hd)html = etree.HTML(r.text)nodes = html.xpath("//ul[@class='f-cb']/li")logger.info('{}  {}'.format('榜单 ID', '榜单名称'))ans = dict()for node in nodes:id = node.xpath('./@data-res-id')[0]name = node.xpath("./div/p[@class='name']/a/text()")[0]ans[id] = namelogger.info('{}  {}'.format(id, name))return ans

歌曲分析

上面我们获取到了所有的榜单数据,那么针对单个榜单来说,就是要获取其下的所有歌曲了。

分析页面原属可知,歌曲列表是在一个 table 中的,但是通过 requests.get(url,headers=hd)方式获取返回的网页文本内容的话,貌似是获取不到 table 元素的。于是我们将其返回值输出后做了仔细分析,发现歌曲是在 class="f-hide" 的 ul 标签中。与获取榜单类似,同样需要先获取所有的 li 标签,然后在逐个获取歌曲 id 和歌曲 name 就可以了。

def get_topic_songs(topic_id, topic_name):params = {'id': topic_id}r = requests.get(url, params=params, headers=hd)html = etree.HTML(r.text)nodes = html.xpath("//ul[@class='f-hide']/li")ans = dict()logger.info('{} 榜单 {} 共有歌曲 {} 首 {}'.format('*' * 10, topic_name, len(nodes), '*' * 10))for node in nodes:id = node.xpath('./a/@href')[0].split('=')[1]name = node.xpath('./a/text()')[0]ans[id] = namelogger.info('{}  {}'.format(id, name))return ans

同样该函数返回一个字典,key 为歌曲 id,value 为歌曲名称。

下载歌曲

我们还需要一个下载歌曲的函数,该函数接收歌曲 id,然后以文件流的形式直接读取到本地。

def down_song_by_song_id_name(id, name):if not os.path.exists(download_dir):os.mkdir(download_dir)url = 'http://music.163.com/song/media/outer/url?id={}.mp3'r = requests.get(url.format(id), headers=hd)is_fail = Falsetry:with open(download_dir + name + '.mp3', 'wb') as f:f.write(r.content)except:is_fail = Truelogger.info("%s 下载出错" % name)if (not is_fail):logger.info("%s 下载完成" % name)

最后将所有的操作组合到 main 函数中,作为程序的入口函数。

def main():ids = get_topic_ids()while True:print('')logger.info('输入 Q 退出程序')logger.info('输入 A 下载全部榜单歌曲')logger.info('输入榜单 Id 下载当前榜单歌曲')id = input('请输入:')if str(id) == 'Q':breakelif str(id) == 'A':for id in ids:down_song_by_topic_id(id, ids[id])else:print('')ans = get_topic_songs(id, ids[id])print('')logger.info('输入 Q 退出程序')logger.info('输入 A 下载全部歌曲')logger.info('输入歌曲 Id 下载当前歌曲')id = input('请输入:')if str(id) == 'Q':breakelif id == 'A':down_song_by_topic_id(id, ans[id])else:down_song_by_song_id_name(id, ans[id])if __name__ == "__main__":main()

总结

今天我们以网易云网页版为数据源来下载音乐文件,其中下载操作是最简单的,比较麻烦的是分析榜单 id 和获取榜单下的歌曲列表,但榜单下的歌曲列表其实远不止 10 条,而我们获取歌曲的函数 get_topic_songs 每次只可以获取 10 条歌曲,这是因为我们没有在 headers 添加 cookie 导致的,因为只有登录之后才会显示所有的歌曲。小伙伴们可以登录自己的账户然后添加 cookie 做下尝试。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

 


http://chatgpt.dhexx.cn/article/yWJy3eaa.shtml

相关文章

网易云音乐虚化图片html,网易云音乐怎么换背景 背景图片设置方法

网易云音乐作为主流的手机音乐播放器,依托强大的社交功能,从众多播放器中脱颖而出,个性化的皮肤更是为它增加了不少魅力,下面就跟小编了解下具体的设置方法吧。 类别:影音播放 大小:90.81M 语言&#…

JAVA如何用URL下载网易云音乐

1.打开网易云,选择一首歌曲播放,然后按f12 2.找到并点击以.m4a结尾的链接 3.把输入框的链接替换代码里面的URL //1.获取资源地址URL url new URL("https://m801.music.126.net/20201006161345/802c3e2bd0240db619e27a7f1eeffcce/jdyyaac/5608/005a…

使用云函数快速升级网易云音乐等级

关于等级特权,网易云官网有介绍 https://music.163.com/#/level/details ,最高级Lv10有100G音乐云盘免费容量 使用分享的脚本是每天自动在网易云音乐刷完300首歌,让你的账号快速升级(等级数据每天下午2点更新) 一个…

网易云linux版本如何安装包,网易云音乐Linux版提供64位和32位ubuntu16.04安装包

网易云音乐终于推出了官方Linux版本,提供的下载安装包有: deepin15(32位):http://s1.music.126.net/download/pc/netease-cloud-music_0.9.0_i386.deb deepin15(64位):http://s1.music.126.net/download/pc/netease-cloud-music_0…

干货,下载网易云课堂和B站的视频

原文网址:https://www.jianshu.com/p/ad20e5a63353 我们在平时的学习中,很有可能会接触 网易云课堂 和 BIlibili 这两个很棒的网站。 有的时候我们在线观看不方便,总是想把网站里面的视频下载到电脑,然后自己闲暇时间进行学习。 方…

EasyRecovery帮你一招找回网易云下载的单曲

科技迅速发展的时代里,人们越来越离不开手机、电脑、平板等电子产品,也更习惯于把重要的音频、视频和图片储存在这些电子产品中了。既然有储存,那就有丢失,大家一定遇到过因误删文件而抓狂的情况吧。不过如今处理误删的情况也完全是小事啦,所谓一物降一物,我们有文件恢复…

网易云API接口运行教程

1.网易云api下载地址: https://neteasecloudmusicapi.js.org/#/ 2.下载或者git clone到本地 3.解压缩NeteaseCloudMusicApi-master.zip 4.在搜索框中输入cmd打开终端,在终端中输入node app.js,服务器已经运行,可以将生成地址输入到…

HC05蓝牙模块(主从一体)简单使用

使用 按住蓝牙模块上的按键,再接通电源,进入AT指令模式,可以进行AT指令设置 引脚连接 PA2(TX) -RX PA3(RX) -TX 5V VCC GND …

蓝牙模块—HC-05调试

每次拿到蓝牙模块进行调试时,都会忘记一些细节等信息。因此为了将来能够顺利地调试蓝牙模块,以本文来记录一下调试过程。 调试所需的硬件有HC-05蓝牙模块,USB转TTL模块,杜邦线若干。 首先用杜邦线将HC05与USB转TTL模块正确连接&am…

【蓝牙模块】三款常用的基础蓝牙模块,HC05,JDY-31,CC2541介绍与测试说明

文章目录 一. HC05二.JDY-311.介绍2.测试 二.CC2541 一. HC05 HC05与其他两款的区别是,需要按住RST键进入AT指令模式 一. 上电进入AT模式方法 先按住HC05蓝牙模块上面的RST按键,再给蓝牙模块通电。蓝牙模块上面的LED进入慢闪模式(约1秒钟闪烁一次)&a…

ATK-HC05蓝牙模块的详细说明

前段时间买了个ATK的HC05蓝牙模块。HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手。说白了,只是个蓝牙转串口的设备,你只要知道串口怎么编程使用,就可以了, 实现了所谓的透…

Arduino使用HC05蓝牙模块与手机连接

通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置Arduino 蓝牙控制 LED 电路设计以及代码编写利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基本参数设置 想要使用 Arduino 的蓝牙模块,首先要对蓝牙模块进行…

HC05和电脑蓝牙通讯

通常情况下都是将HC05和HC04进行主从配对,然后进行通讯。如果手边没有HC04其实可以使用笔记本自带的蓝牙和HC05进行通讯。 配置方法如下: 将HC05配置为主机模式将电脑和HC05的保存连接删除。 单击下方更多蓝牙设置,进行蓝牙串口的配置。 添…

HC05蓝牙点亮LED

本文是对基于STM32的HC05蓝牙点灯实验,目的在于认识HC05蓝牙模块,学会配置HC05,知道怎么用蓝牙在手机上控制单片机并且传输数据,虽然本文只控制led,但是点灯就是基础,主要在于学习hc05蓝牙模块。 1.认识一下…

两个hc05蓝牙模块在两块单片机上通信(附完整代码)

目录 第一步:进入AT模式 第二步:同时插在电脑上实现通信 第三步:单片机上通信 代码链接 所需材料:两个hc05蓝牙,两个usb转串口模块,两块单片机 第一步:进入AT模式 接线图如下所示 HC-05蓝牙…

stm32+hx711+蓝牙hc05 称重系统(蓝牙电子秤)

stm32称重模块hx711蓝牙模块hc05 本项目使用主控stm32f103c8t6,称重模块hx711,蓝牙模块hc05上传至手机app/电脑app显示数值 模块 1、stm32f103c8t6最小系统板 2、hx711 HX711 模块 A 通道带有 128 倍信号增益,可以将 5mV 的电压放大 …

蓝牙模块HC05遇到的一些常见的问题

调模块总是让人很头疼,有时候遇到一些其实很简单的问题也找不到原因,着实难受。这里写一点我在配置HC05遇到的一些常见的问题和对一些问题的理解。 如果你觉得对你有帮助,希望点个赞再走,如果按照本文没解决你的问题,下…

51单片机蓝牙模块(HC05)运行原理

51单片机蓝牙模块(HC05)及其运行原理 目录 51单片机蓝牙模块(HC05)及其运行原理一、测试蓝牙模块二、配置蓝牙模块三、烧写程序四、测试参考博文 一、测试蓝牙模块 在所有工作进行之前首先看一看自己的蓝牙模块是否是正常的&…

HC-05的使用-详细

蓝牙转串口模块HC-05模块使用记录 最近在弄一个需要无线传输数据的项目,虽然以前也接触过HC-05这个模块,但是始终只是知道简单的使用,借这个机会更加深入的学习一下这个模块。 初识HC-05 BLK-MD-HC-05蓝牙模块是专为智能无线数据传输而打造…

STM32系列——手把手教你蓝牙模块HC05、HC06的使用,重在“用起来”(HAL库)

前言 不论是HC05还是HC06,我们用到的都是蓝牙模块的透传功能,只需要用到4个引脚:RXD、TXD、VCC(5V)、GND。 HC-05的使用 1、HC-05有6个引脚,但是我们只用到4个。 2、HC-05正面有一个按键。与HC-06的区别是&…