Python中如何获取网易云我的歌单数据?
分析 POST 数据什么的都发现未登录请求头带了个 csrf_token,,登录后这个又莫名奇妙变成另外一个并储存在 cookie 中
请求链接: http://music.163.com/weapi/v3/playlist/detail?csrf_token=c7e8af0fe539887defb2f22d9b9523d2 然后返回个 json 求告知这个 token 怎么解决。。谢谢
Python中如何获取网易云我的歌单数据?
9 回复
csrf_token 难道不是从 COOKIE 中取得?
import requests
import json
# 1. 获取歌单ID(从网页URL中提取)
playlist_id = "你的歌单ID" # 例如从 https://music.163.com/#/my/m/music/playlist?id=123456 提取123456
# 2. 构造API请求
url = f"https://music.163.com/api/v6/playlist/detail"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Referer": "https://music.163.com/"
}
params = {
"id": playlist_id,
"n": 1000 # 获取的歌单歌曲数量
}
# 3. 发送请求并解析数据
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
data = response.json()
# 4. 提取歌曲信息
if data.get("playlist"):
tracks = data["playlist"]["tracks"]
for track in tracks:
song_name = track["name"]
artists = [ar["name"] for ar in track["ar"]]
album = track["al"]["name"]
song_id = track["id"]
print(f"歌曲: {song_name}")
print(f"歌手: {','.join(artists)}")
print(f"专辑: {album}")
print(f"歌曲ID: {song_id}")
print("-" * 40)
else:
print("未找到歌单数据")
else:
print(f"请求失败,状态码: {response.status_code}")
# 5. 保存数据到JSON文件(可选)
with open("playlist_data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
核心步骤说明:
- 获取歌单ID:登录网易云网页版,从地址栏复制歌单ID
- 调用官方API:使用
/api/v6/playlist/detail接口,需设置正确的请求头 - 解析JSON数据:返回的数据包含歌曲名、歌手、专辑等完整信息
- 处理分页:如果歌单歌曲超过1000首,需要多次请求
注意事项:
- 需要替换代码中的
playlist_id为实际值 - 某些歌单可能需要登录态cookie(通过
requests.Session管理) - 官方API有频率限制,建议适当添加延时
一句话建议:优先使用官方API,注意请求频率和用户隐私。
好像并不需要呀,网页版的歌单,如 https://music.163.com/playlist?id=889570491 里面可以直接获取到 JSON 数据。
你点下分享歌单,然后你就懂了
确实可以,就怕 url:前面 2 数字会变
谢谢大神,,这么难的加密都能弄出来,,,,
之前很想爬歌单。。搞了半天找不到请求方式。。最后很蠢的用 selenium+plantomjs 抓的。。

