
功能定位:为什么“导出歌单”仍不是官方按钮
在网易云音乐 v10.3.0 的客户端里,你可以把整首歌缓存到母带音质,却找不到“一键导出歌单为文本”的入口。原因并不复杂:版权方要求播放链路封闭,平台侧对“可机读的歌单列表”持保守态度。于是,导出需求被拆成两条暗线:① 面向普通用户的“分享→复制链接”——只能拿到前 30 首;② 面向开发者的公开 API——需登录 Cookie,且每日调用额度浮动。本文要做的,就是在不突破服务协议的前提下,把这两段缝隙拼成一条可复现的完整通道。
方案对比:零代码、浏览器抓包与第三方归档机器人
1. 零代码:网页版“分享+记事本”拼装
适合 100 首以内、更新频率低的个人歌单。优点是无需安装任何软件;缺点是手动翻页,超过 30 首后需重复“展开全部”→“全选复制”→“粘贴到记事本”三步。经验性观察:200 首歌大约需要 7-8 次展开,耗时 3-5 分钟。
2. 浏览器抓包:利用原生 API 一次性拉取
适合 500-3000 首的中型歌单,可导出为 CSV/JSON/TXT 三种格式。原理是复用网页版自己的 /api/v6/playlist/detail 接口,该接口在登录状态下会返回全部 trackIds,不受 30 首限制。操作门槛仅“会按 F12”,无需编写代码;但需自行处理 Cookie 过期(有效期约 24 h)。
3. 第三方归档机器人:把 Cookie 托管出去
Telegram、QQ 频道里存在“歌单归档机器人”,输入分享链接即可返回 CSV 文件。便利度最高,却要把 _MUSIC_U 等关键 Cookie 交给对方,存在账号被异地登录的风险。若歌单含“付费母带”或“独家预售”曲目,还可能触发版权告警。本文不提供具体机器人名称,仅建议“能不用就不用”。
决策树:如何 30 秒选出合适方案
- ≤100 首 + 半年不换 → 零代码网页复制
- 100-3000 首 + 每月更新 → 浏览器抓包
- >3000 首或需要自动同步 → 自建脚本(超出本文范围,需申请商业 API)
- 公司内网无法开 DevTools → 只能选 1 或 3,优先 1
零代码操作路径:桌面网页版 5 步导出
- 登录 music.163.com → 进入“我的音乐”→ 选定目标歌单。
- 点击歌单标题右侧「...」→「分享」→ 复制链接备用(可验证是否为 /playlist?id=xxxx)。
- 回到歌单页,点「加载更多」直至出现“已显示全部”。经验性观察:若曲目 >150,需滚动 2-3 次才会触发“全部”按钮。
- Ctrl+A 全选 → Ctrl+C 复制;打开记事本 → Ctrl+V 粘贴。此时会得到带空行的纯文本,含“序号 歌曲名 - 歌手”。
- 用记事本「替换」功能把多余空格统一为制表符,即可导入 Excel。若出现“歌曲名与歌手颠倒”,用 Excel「数据→分列」选择“-”作为分隔符即可。
平台差异:macOS Safari 需先启用“开发菜单”才能看到“加载更多”按钮;iPad 端浏览器若请求桌面站点,步骤相同。
浏览器抓包:一次性获取完整 JSON 并转 TXT
前置条件
- Chrome/Edge 当前最新版本(以 2026-05 正式通道为准)
- 已登录网易云音乐网页版,且账号未开启“登录保护”导致 Cookie 频繁失效
- 歌单为“公开”或“仅自己可见”均可,私密歌单需自己账号 Cookie
步骤 1:清空缓存,防止旧数据干扰
F12 → Network → 勾选 Disable cache;保持 DevTools 打开状态,刷新歌单页。
步骤 2:找到 playlist/detail 请求
在 Filter 框输入 detail,可见一条 URL 为 /api/v6/playlist/detail 的 XHR,点击它 → Preview 面板展开,能看到 playlist.trackIds 数组长度与歌单总数一致,即代表成功。
步骤 3:复制响应并提取字段
在 Response 面板 Ctrl+A 全选 → 复制;打开 jsoncrack.com 或任意 JSON 格式化工具,粘贴后下载为 .json 文件。若你熟悉 Excel,可直接“数据→获取数据→自文件→JSON”,在导航器勾选:
- playlist.name → 歌单名
- playlist.tracks[*].name → 歌曲名
- playlist.tracks[*].ar[0].name → 主歌手
- playlist.tracks[*].al.name → 专辑
步骤 4:导出为纯文本
Excel 加载后,保留需要的列,另存为“文本(制表符分隔).txt”,即可得到“歌曲名\t歌手\t专辑”三栏数据。UTF-8 编码可在另存对话框底部选择,防止 macOS 下出现乱码。
offset=10000 参数分页;此时建议改用开源脚本,手动拼接易出错。
例外与取舍:哪些歌单导不出来?
1. 版权下架曲目
接口返回的 tracks 数组里,下架歌曲会被替换为 "noCopyrightRcmd":null,但 name 字段仍保留原始标题,只是无法播放。导出文本不受影响,可视为“幽灵占位”。
2. 独家预售/数字专辑
若你曾购买数字专辑但未在有效期内下载,接口会返回歌曲信息,但本地播放时提示“未购买”。文本导出依旧完整,只是“可听性”字段缺失,不影响列表本身。
3. 协作歌单(多人维护)
协作歌单同样适用本方法,但“更新频率”不可控。经验性观察:若其他成员在你导出瞬间增删歌曲,可能导致 trackIds 与实际 tracks 不匹配,出现空行。缓解办法:导出前临时关闭“允许他人编辑”,完成后再开启。
与第三方工具协同的最小权限原则
若你执意使用“歌单归档机器人”,至少遵循以下三条:
- 仅提供 _MUSIC_U 与 __csrf 两个 Cookie,拒绝交出手机号、密码或短信验证码。
- 导出完成后,立即在网易云音乐「账号安全→登录设备管理」踢掉异地 Session,并修改密码。
- 对含“付费母带”曲目的歌单,先手动下架再导出,避免机器人替你触发版权告警。
故障排查:常见 4 种空列表/登录失效
| 现象 | 最可能原因 | 验证方法 | 处置 |
|---|---|---|---|
| Preview 面板空白 | 未登录或 Cookie 过期 | 新开标签访问 music.163.com,看右上角头像是否在线 | 重新登录,再刷新歌单页 |
| trackIds 数量 < 实际 | 歌单内含“已下架”曲目,被折叠 | 对比网页版可见曲目数与 JSON 长度 | 属正常缺口,无需处置 |
| Excel 提示“列数超限” | 直接导入整个 JSON,嵌套层太深 | 观察导航器是否出现“records”节点 | 仅勾选 tracks[*] 层,勿选根节点 |
| 导出文件乱码 | Windows 记事本默认 ANSI | 用 VS Code 打开,查看右下角编码 | 另存为 UTF-8 with BOM |
适用/不适用场景清单
- 适用:个人备份、曲库搬家到本地硬盘、做 DJ 曲目表、写乐评文章附歌单。
- 不适用:实时同步到公有云盘(可能含版权水印)、商用批量分发、爬取全站曲库做竞品分析(违反 robots.txt)。
- 灰色地带:公司内部分享“办公 BGM 列表”,若超过 50 人访问,建议脱敏歌曲文件路径,仅保留文本。
最佳实践 5 条速查表
- 导出前先截图保存当前封面,方便后续人工对版。
- 把 Cookie 复制到本地记事本,24 h 内用完即删,避免被扫号。
- 文件名加上“yyyymmdd”后缀,防止多次导出后混淆版本。
- 若歌单含敏感标题(如内部项目代号),用 Excel「查找替换」批量脱敏再转发。
- 每季度检查一次接口域名是否变更(历史曾从 music.163.com 跳到 music.126.net),失效时重新抓包。
FAQ:导出歌单常见疑问
导出文本能保留歌词吗?
不能。/api/v6/playlist/detail 只返回歌曲元数据,歌词需额外调用 /api/v1/lyric,且受版权限制无法批量保存。
手机端可以不走电脑吗?
经验性观察:Kiwi 浏览器(Android)可安装 Chrome 插件,但屏幕尺寸限制,粘贴到 Excel 易错位;iOS 因系统沙盒,无法直接下载 JSON,需借助快捷指令转码,稳定性差。仍推荐桌面端完成。
导出的列表能直接导入 QQ 音乐吗?
QQ 音乐 PC 客户端支持“CSV 导入”,但列顺序需调整为“歌曲名,歌手,专辑”,且编码必须为 UTF-8。导入成功率约 80%,剩余 20% 因曲库差异需手动匹配。
Cookie 泄露最坏后果是什么?
攻击者可异地登录你的账号,创建/删除歌单、发表恶意评论;若账号已绑定数字人民币钱包,还可能触发 BeatCoin 提现风险。立即踢掉设备并改密码可将损失降到最低。
为什么 10.3.0 之后找不到“加载更多”按钮?
官方在 10.3.1 热更新中把“加载更多”改为自动无限滚动。解决:直接滚到底,再执行全选复制即可,逻辑不变。
收尾:导出只是起点,备份才有意义
歌单文本只占几 KB,却浓缩了你数年的听觉记忆。把这份列表存进本地仓库、加密云盘,甚至打印成纸质“音乐手账”,都能在未来换平台、版权下架或账号异常时,让你快速重建私人宇宙。下一次再听到“该歌曲已失效”,你只需打开 CSV,搜索歌名,去别的合法渠道重新收藏即可——这才是导出操作的终极价值。
下一步行动:挑一个你最珍视的歌单,按本文抓包流程走一遍,把第一份 TXT 保存在硬盘根目录,文件名改成“202605-音乐救生筏”。今天花 5 分钟,未来可能省掉 5 小时的“这首歌到底叫什么”的焦虑。