网易云音乐批量下载工具编写过程

网易云音乐歌单批量下载歌曲(python) 使用 metting api 批量下载网易云音乐歌曲。 阅读详情


最近编写了一个 网易云音乐下载工具,感觉效果不错,就造成了这期博客的诞生。详细的源代码和可执行程序在github上面下载: https://github.com/Lmh-java/163MusicDownloaderV1.1 喜欢的star fork 一下。总的来说技术难点分为两部分:1.爬虫 2.下载IO操作

part 1 软件的分层以及准备工作

   软件分为四个package 分别是 main(用来存储主要的类) view (存储GUI类)util(工具类的存放) model(存储内部使用的模型类)
   大致可以分为4层。
上图
类和包的架构

   调用到的外部类库:
commons.jar
dom4j.jar
fastjson.jar(因为涉及到json和xml数据结构所以都要用)
httpClient.jar
httpcore.jar
httpmime.jar
Jsoup.jar
…(还有一些无关紧要的jar包)
直接上图

有一些jar包我也不太清楚是哪里来的。。。
有一些包已经弃用了,以后会优化代码并且删除。

part 2 软件核心工作流程

先上流程图,后面会阐述关键API1、2和关键代码。

Created with Raphaël 2.2.0 开始下载 构造包访问API 1 获取歌单信息(所有歌曲id) 根据歌曲id再次调用API 2 获取单曲下载地址 发送给下载模块进行下载 End

part3 API 1、2介绍

本软件最重要的部分就是网络API部分,大家可以自己调用这两个api。

API 1

http://music.163.com/api/playlist/detail?id=
功能:通过歌单id解析获取歌曲id
参数:id=歌单id
调用方法:get 就可以了

上代码

public static ArrayList<Music> crawl(String listId,String cookie) throws ParseException, IOException {
		CloseableHttpClient httpclient = HttpClients.createDefault();
		CloseableHttpResponse response = null;
		HttpGet httpGet = new HttpGet("http://music.163.com/api/playlist/detail?id=" + listId);
		// httpGet.addHeader("Referer", "http://music.163.com/");
		httpGet.addHeader("User-Agent",
				"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36");
		try {
			response = httpclient.execute(httpGet);
		} catch (IOException e) {
			//处理异常
		}
		HttpEntity entity = response.getEntity();
		if (entity != null) {
			String json = EntityUtils.toString(entity, "utf-8").toString();
			JSONObject jsStr = JSON.parseObject(json);
			JSONObject results = jsStr.getJSONObject("result");
			JSONArray tracks = results.getJSONArray("tracks");
			for(int x=0;x<tracks.size();x++){
				String name = (String)tracks.getJSONObject(x).getString("name");
				String id = (String)tracks.getJSONObject(x).getString("id");
				result.add(new Music(id,name));
				}
			}
		return result;
	}

主要就是get这个API然后通过返回的json来解析id
这里使用了一个json格式化校验小工具,向大家推荐一下:https://www.json.cn/
由于代码太长,无法所见,大家自己点进去看一下:http://music.163.com/api/playlist/detail?id=519471484
json数据展示
在result的tracks下面储存的全部都是歌曲信息,包括我们需要的id信息。

API 2

地址:http://music.163.com/weapi/song/enhance/player/url?csrf_token=7c8c959657fc0ee7f906a43143bf124
提交方法:POST
参数:cookie (可以抓包去自己获取) encSecKey params …
功能:获取歌曲对应的真实下载地址

		//a为歌曲id
		a = a.split(":::")[0];
		CloseableHttpClient httpclient = HttpClients.createDefault();
		CloseableHttpResponse response = null;
		String first_param = "{ids:\"[" + a + "]\", br: \"320000\", csrf_token:\"\"}";
		String secKey = "FFFFFFFFFFFFFFFF";
		// 两遍ASE加密
		String encText = aesEncrypt(aesEncrypt(first_param, "0CoJUm6Qyw8W8jud"), secKey);
		String encSecKey = rsaEncrypt();
		HttpPost httpPost = new HttpPost(
				"http://music.163.com/weapi/song/enhance/player/url?csrf_token=7c8c959657fc0ee7f906a43143bf124c");
		httpPost.addHeader("Referer", "http://music.163.com/");
		httpPost.addHeader("User-Agent",
				"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36");
		httpPost.addHeader("Cookie",cookie);
		List<NameValuePair> ls = new ArrayList<NameValuePair>();
		ls.add(new BasicNameValuePair("params", encText));
		ls.add(new BasicNameValuePair("encSecKey", encSecKey));
		UrlEncodedFormEntity paramEntity = new UrlEncodedFormEntity(ls, "utf-8");
		httpPost.setEntity(paramEntity);
		response = httpclient.execute(httpPost);
		HttpEntity entity = response.getEntity();
		if (entity != null) {
			String json = EntityUtils.toString(entity, "utf-8").toString();
			JSONObject jsStr = JSON.parseObject(json);
			String json1 = jsStr.getString("data").replace("[", "").replace("]", "");
			JSONObject jsStr1 = JSON.parseObject(json1);
			result = jsStr1.getString("url");
		}
		response.close();
		httpclient.close();
		return result;
	}
	public static String aesEncrypt(String src, String key) throws Exception {
		String encodingFormat = "UTF-8";
		String iv = "0102030405060708";
		Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
		byte[] raw = key.getBytes();
		SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");
		IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
		
		// 使用CBC模式,需要一个向量vi,增加加密算法强度
		cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
		byte[] encrypted = cipher.doFinal(src.getBytes(encodingFormat));
		return new BASE64Encoder().encode(encrypted);
		
	}

	public static String rsaEncrypt() {
		String secKey = "257348aecb5e556c066de214e531faadd1c55d814f9be95fd06d6bff9f4c7a41f831f6394d5a3fd2e3881736d94a02ca919d952872e7d0a50ebfa1769a7a62d512f5f1ca21aec60bc3819a9c3ffca5eca9a0dba6d6f7249b06f5965ecfff3695b54e1c28f3f624750ed39e7de08fc8493242e26dbc4484a01c76f739e135637c";
		return secKey;

	}
	
	public static ArrayList<Music> doPost(ArrayList<Music> name,String cookie) throws Exception{
		for(int x=0;x<name.size();x++){
			String url =api(name.get(x).getId(),cookie);
			name.get(x).setUrl(url);
		}
		return name;
	}

大概的原理就是通过api获取的参数进行几次加密,具体的过程我只会分析enctype这个参数,params参数是我看了一个大佬的文章做出来的:http://element-ui.cn/news_show_25945.shtml

这次的博客大概就这样了吧,有bug或者提问可以在github https://github.com/Lmh-java/163MusicDownloaderV1.1 或者本文评论里面留言,谢谢,希望有更多大佬来指点迷津。

Python 实现网易云音乐歌单批量下载:从原理到实践 通过 Python 实现网易云音乐歌单批量下载,不仅是对编程技能的实践,更是对网络数据交互原理的深入理解。在使用过程中,我们应始终遵守平台规则和版权法律,将技术用于合法合规的场景如果你对代码有任何优化建议,或遇到特定的技术问题,欢迎交流。后续可进一步探索其他音乐平台的下载实现,或开发音乐管理、分类的附加功。能。 阅读详情

相关推荐

批量下载网易云音乐歌单的Python脚本

同时,这也展示了如何利用Python在日常生活中解决实际问题的能力,希望这个小技巧对你有所帮助!

qq_43580271的博客 2805

实现音乐自由——免费听(全网音乐)+歌单批量下载MP3方法(某易云)

不废话全干货:实现音乐自由——免费听(全网音乐)+歌单批量下载MP3方法(某易云) 纯纯纯免费 亲测有效

输出既学习 6万+

网易云音乐批量下载

可批量下载网易云音乐,python开发实现的小工具,暂时只能下载免费音乐

网易云音乐批量下载器v1.1软件介绍(修正版)

网易云音乐批量下载器简介网易云音乐批量下载器v1.1 软件介绍1.编写初衷2.界面展示3.使用方法4.其他说明5.下载地址 网易云音乐批量下载器v1.1 软件介绍 1.编写初衷 就在最近几个月,作为网易云音乐忠粉的我,迷上了从上网站上面抓包下载音乐,但是那样效率太低,所以就直接用Java手写了一个网易云音乐批量下载工具。 2.界面展示 界面简单,使用方便。 3.使用方法 软件本身使用非常简单...

Lmh_java的博客 6391

xhy网易云音乐歌词批量下载工具(缓存转换工具)V2.2最新绿色免费版

xhy网易云音乐歌词批量下载工具是一款可以帮助用户批量下载网易云音乐歌曲的辅助软件。xhy网易云音乐歌词批量下载工具能够识别各类列表、单曲、榜单,并一键下载,帮助用户更轻松地获取高品质音乐。 软件用途 批量下载网易云歌单歌词,同时支持添加单个歌曲id。 本地缓存转换为mp3文件。   使用说明 1、运行软件,打开网易云音乐网站; 2、找到自己喜欢的音乐,复制地址栏的地址; 3、点击“

无人机信号干扰系统设计方案

设计定向阻塞干扰器需要结合射频(RF)技术、功率放大技术和定向天线技术,核心目标是向特定方向发射高功率噪声信号,覆盖目标频段,阻断无人机的通信或导航信号。实际设计中需平衡功率、效率、散热和便携性,同时需考虑抗干扰技术的快速演进(如无人机加密通信和AI避障)。在合法框架下,此类设备可有效应对“黑飞”威胁,但技术滥用风险需严格管控。定向阻塞干扰器的硬件设计核心在于。

wanghao312的博客 3060

python如何实现批量下载网易云音乐?来看看完整项目

有很多学习python的小伙伴都一开始被python的爬虫所吸引,那么到底python的爬虫到底是不是那么神乎,小编给大家分享一个实战案例让大家来更具体的了解一下python爬虫。

xiangxueerfei的博客 1618

银河飞腾FT6678实战指南:OpenMP多核并行编程优化技巧

本文详细介绍了在银河飞腾FT6678多核处理器上使用OpenMP进行并行编程的实战技巧与优化方法。从基础语法到环境配置,再到性能优化的五大核心技巧,包括循环并行化、并行粒度控制、reduction子句使用等,帮助开发者充分发挥FT6678的8核计算能力。通过实际案例展示如何将图像处理算法从200ms优化到28ms,并深入探讨了任务调度、内存访问优化等进阶主题。

weixin_29234423的博客 285

网易云音乐批量下载:免费工具完整指南

还在为无法离线收听网易云音乐而烦恼吗?想要一键下载完整歌单却找不到合适工具?这款免费的网易云音乐批量下载工具让你轻松实现高品质MP3音乐自由,快速建立个人专属音乐库。 ## 🎵 为什么选择这款下载工具? **完美解决三大痛点**: - ✅ **音质无损**:直接获取320k高品质MP3文件,告别压缩音质 - ✅ **信息完整**:自动嵌入专辑封面、歌手信息等完整元数据 - ✅ **操作简单*

gitblog_00408的博客 860

【k8s实战】 在离线项目混部 通过kubeflow(tf-operator)部署TensorFlow机器学习任务+prometheus/grafana监控资源使用全过程(最新 图文)

目录在离线混合部署概念最新版kubeflow部署TensorFlow部署二级目录三级目录 在离线混合部署概念 先举一个例子,众所周知的天猫双十一当天的流量非常之大,那么就需要成百上千台服务器构成一个超大集群来提供计算能力,但是双十一过去之后,集群资源就面临着浪费的局面。假设业务分为在线和离线两种模式:在线任务需要资源相对较少,但要求响应时间短;离线任务则不需要对任务进行迅速响应,但是计算量相对较大、占用资源多。那么我们应该怎么在K8S集群上完成这两种业务的部署、并且使得CPU利用率始终维持在一个比较高的水平

Eros1on的博客 1545

CloudCompare源码分析之CCCoreLib模块:ICP算法(阅读经典)

CloudCompare源码分析之CCCoreLib模块:ICP算法(阅读经典)

dayuhaitang1的博客 2550

终极免费网易云音乐批量下载工具:完整ID3标签一键搞定

还在为网易云音乐的版权限制而烦恼吗?想要轻松下载完整歌单建立个人音乐库?这款基于Python开发的免费网易云音乐批量下载工具正是你需要的完美解决方案。它不仅能下载320k高品质MP3,还能自动为每首歌曲添加完整的ID3元数据,包括专辑封面、歌手信息、专辑名称等,让你的本地音乐库和在线体验一样完美。 ## 为什么你需要这款音乐下载神器? 在数字音乐时代,我们都面临着一个共同的困境:心爱的歌曲可能

gitblog_00424的博客 1552

《QGIS快速入门与应用基础》191:渐变区间设置(等间隔/分位数)

深入解析QGIS中渐变符号化的核心环节——渐变区间设置,重点对比等间隔与分位数两种主流模式的原理与应用。作者指出,90%的渐变效果问题源于区间设置不当,强调必须先分析数据分布特征(通过统计面板查看直方图、极值等)再选择匹配模式。等间隔模式适用于均匀分布数据(如海拔、温度),将数值范围均等划分;分位数模式则针对偏态数据(如GDP、人口),保证每个区间要素数量相等。文章通过界面示意图、效果对比图和操作步骤详解,指导读者根据数据类型选择合适区间模式,并提醒常见避坑要点:社会经济数据禁用等间隔、分类数不超过8类。

LuckyHanMo的博客 315

网易云音乐高品质音频批量下载工具完全指南

还在为无法随时随地享受网易云音乐的优质内容而困扰吗?想要建立专属音乐收藏库却受限于下载难题?这款智能网易云音乐下载器让你轻松突破限制,实现音乐资源自由获取。 ## 用户痛点深度解析 **场景化需求分析**: - 通勤路上网络信号不稳定,无法在线收听 - 想为视频创作寻找合适背景音乐素材 - 需要为聚会活动准备离线音乐播放列表 - 想要收藏喜欢的歌手完整专辑作品 ## 工具核心亮点展示 **

gitblog_00154的博客 1205

RFC-only 与 SAProuter 场景下,让 Claude 真正参与 SAP ABAP 开发

SAP ABAP 开发这几年正在出现一个很有意思的变化。过去我们说开发工具,脑子里大多是 SE80、SE38、SE24、SEGW、Eclipse ADT,再往后是 BAS、VS Code、abapGit、ATC、CI/CD。现在又多了一层,Claude Code、Claude Desktop 这类 AI 编程助手开始通过 MCP 进入开发现场,不只是写一段示例代码,而是能读系统里的 ABAP 对象、搜索包、改源码、跑检查、辅助重构。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1617

Oracle EBS 寄销/VMI(2)-->采购篇

上篇有一部分设置需要建BPA后,将BPA编号与批准的供应商相关联.     本篇主要是讲的内容:一揽子采购协议-->准标采购订单-->收接入库-->子库转移-->创建冲减通知-->'按接收开票' 自动开票程序 1. PO-->采购订单à采购订单 创建一揽子采购协议,确定物料

陈显平的专栏-Oracle EBS 1万+

如何用Python快速批量下载网易云音乐完整歌单

还在为无法离线保存心爱的音乐而烦恼吗?这款基于Python3.X的网易云音乐下载工具,让你只需一条命令就能批量下载歌单中的所有歌曲,自动嵌入专辑封面和完整ID3标签,实现真正的音乐自由获取。 ## 🎵 三大核心痛点,一站式解决方案 **高品质音质需求**:传统下载工具往往无法提供320k比特率的高品质音乐,导致音质严重损失。 **完整元数据管理**:下载的音乐文件缺少歌手信息、专辑封面等关

gitblog_00946的博客 917

UI自动化控制PC端微信获取当前群聊的群友列表

在一个月前,某个群友在获取整个群的群友信息时遇到了一点问题: 对整个群进行群友数据获取经测试确实有点棘手,下面我将我的解决过程公布给大家。 基础教程详见: https://blog.youkuaiyun.com/as604049322/article/details/121391639 人工打开要抓取的群聊窗口后,首先获取微信窗口并点击聊天信息按钮: import uiautomation as auto auto.uiautomation.SetGlobalSearchTimeout(1) wechatWind

小小明-代码实体的专栏 3万+

如何高效实现网易云音乐批量下载:专业工具全解析

你是否曾遇到过这样的困扰:喜欢的网易云音乐歌单无法离线收听,或者想要建立个人音乐库却苦于下载限制?音乐爱好者们常常面临高品质音源获取困难、元数据缺失、批量操作繁琐等痛点。本文将为你揭秘一款专业的网易云音乐批量下载解决方案,通过问题导向的方法论、完整的实践演示和实用的进阶技巧,助你轻松突破下载壁垒。 ## 问题诊断:音乐下载的三大核心痛点 **音质压缩问题**:传统下载方式往往导致音质严重损失,

gitblog_00802的博客 1053

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

网易云音乐一键下载工具完整使用指南

想要将网易云音乐的歌单和专辑永久保存到本地吗?这款开源的音乐下载工具能帮你轻松实现批量下载,支持完整ID3元数据保存,包括封面图片、歌手信息、专辑名称等。 ## 快速开始:三步完成音乐下载 ### 获取项目源码 首先克隆项目到本地: ```bash git clone https://gitcode.com/gh_mirrors/ne/netease-cloud-music-dl ``` #

gitblog_00080的博客 794

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python爬虫实战-批量爬取下载网易云音乐

我们要通过Python得到这个请求地址,需要进行js逆向,破解,得到js方法源代码,然后进行模拟拼接动态请求,得到音乐二进制文件,锋哥上有老,下有小,容易受到律师函,进去踩缝纫车,就不搞这种方式。近日锋哥又卷了一波Python实战课程-批量爬取下载网易云音乐,主要是巩固下Python爬虫基础。谷歌 F12 进入开发者工具,点 Media 我们是可以得到音乐的源文件的。第三步,我们点 音乐列表 前面的播放按钮,当前页面底部会出现播放器,播放音乐。现在我们要爬取这里面的音乐文件,我们正常人的分析思路是这样的。

java1234的博客 4369

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

仿网易云音乐网页版html代码_免费畅听所有网易云音乐!!!!

“阅读本文仅需一分钟”自从前年年底起所有的web端在线音乐全部一夜下降之后,今年网页版音乐又再度回到我们的视野。说是整改,需要将音乐资源屏蔽,许多音乐运营商都重构了代码,然而我还是禁不住用爬虫去试试,看看到底发爬虫到什么程度,但是结果令我大吃一惊。。。。。。网易云音乐压根没怎么去修改。。。但是他把歌曲的url地址隐藏了。。。。然后我们又想了很多办法去搞他。。。最后,爬虫代码照样还是通行无...

weixin_39823017的博客 7829

免费获取网易云音乐高品质MP3:3分钟学会批量下载完整歌单

还在为无法离线收听网易云音乐的歌曲而烦恼吗?想要建立个人专属音乐库却苦于下载困难?现在,这款Python网易云音乐下载器让你轻松实现音乐自由,一键批量下载完整歌单,自动嵌入专辑封面和完整元数据。 ## 🎧 为什么选择这款下载工具? **高品质音质保障**:告别音质压缩,直接获取320k比特率的高品质MP3文件,享受原汁原味的听觉盛宴。 **完整元数据管理**:自动下载并嵌入歌手信息、专辑名

gitblog_00835的博客 1655

Python3批量下载网易云音乐热歌榜

Python3批量下载网易云音乐热歌榜 可以批量下载网易云音乐热歌榜的歌曲,可以自己设定数量,速度非常快。 https://music.163.com/#/discover/toplist?id=3778678 需先安装以下两个模块 import requests from bs4 import BeautifulSoup 附源码: 欢迎关注+点赞+评论...

RealMadridCF 1万+

6个实用技巧:全面掌握网易云音乐无损下载工具

还在为无法下载高品质音乐而烦恼吗?这款网易云音乐无损解析工具为你提供了完美的解决方案。通过简洁的API设计和直观的Web界面,你可以轻松实现音乐搜索、单曲解析、歌单批量处理等核心功能。 ## 工具核心能力概览 ### 全音质等级支持 该工具覆盖了从基础到专业的完整音质体系: - **标准音质** - 满足日常收听需求 - **高音质版本** - 提供更清晰的听觉体验 - **无损格式*

gitblog_01146的博客 873

网易云音乐智能下载工具全方位使用指南

还在为无法离线畅听心爱歌单而苦恼吗?想要一键收藏所有网易云音乐却苦于没有便捷工具?这款智能化的网易云音乐批量下载神器,让你轻松实现高品质音乐自由,快速打造个人专属音乐库。 ## 🎯 场景化解决方案:你的音乐管家 **你知道吗?** 这款工具专为三大典型场景设计: **音乐爱好者专属**:一键下载完整歌单,无论流行金曲还是冷门佳作,统统收入囊中 **内容创作助手**:快速获取背景音乐素材,

gitblog_00216的博客 997
上一篇: 网易云音乐批量下载器v1.1软件介绍(修正版)
下一篇: Minecraft我的世界 forge mdk1.13(1.14)开发环境搭建教程及经验
Lmh_java
博客等级 码龄7年 13粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值