获取网易云音乐歌单-我喜欢的音乐-歌手与其歌曲数量

import os
import pandas as pd
import sqlite3
import json
import sys
from collections import defaultdict


# %localappdata%/Netease/CloudMusic/Library

def get_file_path():
    dir_path = os.getenv('localappdata')
    child_path = '/Netease/CloudMusic/Library'.split('/')
    file_name = 'webdb.dat'
    file_path = os.path.join(dir_path, *child_path, file_name)
    return file_path


def get_result(file_path, pid='373649554'):
    conn = sqlite3.connect(file_path)

    sql_result = conn.execute(f"""select b.track from web_playlist_track a

    left join web_track b

    on a.tid = b.tid

    where a.pid = '{pid}'""")

    data = sql_result.fetchall()
    json_data = [json.loads(i[0]) for i in data if i[0]]

    result2 = defaultdict(list)
    for i in json_data:
        music_name = i['name']
        for j in i['artists']:
            people_name = j['name']
            result2[people_name].append(music_name)
    result_num = [(i, len(j)) for i, j in result2.items()]
    t = sorted(result_num, key=lambda x: x[1], reverse=True)
    return t


def main(num):
    file_path = get_file_path()
    result = get_result(file_path)
    print(result[:num])


def get_num():
    num_ = 30 if len(sys.argv) == 1 else int(sys.argv[1])
    return num_


if __name__ == '__main__':
    num = get_num()
    main(num=num)

最后大致输出如下:

In [42]: print(t[:30])
[('林俊杰', 18), ('张学友', 16), ('Alan Walker', 16), ('Backstreet Boys', 13), (
'赵雷', 13), ('许嵩', 12), ('陈奕迅', 11), ('张国荣', 10), ('周华健', 9), ('Char
lie Puth', 9), ('王力宏', 9), ('Westlife', 9), ('Maroon 5', 9), ('Two Steps From
 Hell', 9), ('Beyond', 8), ('孙燕姿', 8), ('Various Artists', 8), ('姫神', 8), (
'莫文蔚', 7), ('王菲', 7), ('陈慧琳', 7), ('任贤齐', 7), ('July', 7), ('花粥', 7
), ('G.E.M.邓紫棋', 6), ('Aimer', 6), ('Lenka', 6), ('Sia', 6), ('F.I.R.', 6), (
'Coldplay', 6)]

说明:
其中pid是歌单id,打开相应歌单,并复制链接,链接中的id就是歌单id,替换代码中的id即可
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值