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)

核心步骤说明:

  1. 获取歌单ID:登录网易云网页版,从地址栏复制歌单ID
  2. 调用官方API:使用/api/v6/playlist/detail接口,需设置正确的请求头
  3. 解析JSON数据:返回的数据包含歌曲名、歌手、专辑等完整信息
  4. 处理分页:如果歌单歌曲超过1000首,需要多次请求

注意事项:

  • 需要替换代码中的playlist_id为实际值
  • 某些歌单可能需要登录态cookie(通过requests.Session管理)
  • 官方API有频率限制,建议适当添加延时

一句话建议:优先使用官方API,注意请求频率和用户隐私。

好像并不需要呀,网页版的歌单,如 https://music.163.com/playlist?id=889570491 里面可以直接获取到 JSON 数据。

你点下分享歌单,然后你就懂了

确实可以,就怕 url:前面 2 数字会变

谢谢大神,,这么难的加密都能弄出来,,,,

之前很想爬歌单。。搞了半天找不到请求方式。。最后很蠢的用 selenium+plantomjs 抓的。。

回到顶部