1678613071 发表于 2021-2-8 14:53

自动下载歌单音乐

本帖基于
“Python抓取全网音乐
https://www.52pojie.cn/thread-1358748-1-1.html
(出处: 吾爱破解论坛)

这位老哥的代码
弟弟叫我帮忙下载歌曲到u盘用于车载播放,想起在论坛里看到过这位老哥的代码就拿过来用了 但是在歌单里近300首歌曲要一首首输入名称下载还是有点过于繁琐,所以就自己动手进行增删减改。
第一次发帖的小白 代码质量辣眼请见谅{:1_896:}

实现功能:
1,在网易云播放器中将歌单歌曲全部下载后 提取歌曲名称存为 songsname.txt
2,自动下载歌单 songname.txt中的歌曲

q:为什么不直接用爬虫爬取歌单里的歌曲名称,还要先下载一次呢?
a:技术不到位,爬取歌单最多只爬出10首 剩下的不知道为什么爬取不到,有老哥能指教一下的话万分感谢。

q:既然都直接在网易云里下次了我还要这干嘛呢?
a:网易云下载下来后好多歌曲的是ncm格式,但是在车载上播放不了。

使用方法:
import os

file_dir = "D:\CloudMusic\新建文件夹"
for files in os.walk(file_dir, topdown=False):
    files = files
songs_name_list = []

for i in files:
    songs_name = ''
    for item in i:
      if item != '-':
            songs_name += item
      else:
            songs_name_list.append(songs_name)
            break
print(songs_name_list)
withopen('songsname.txt','w',encoding='utf-8') as f:
    for i in songs_name_list:
      f.write(i)
      f.write('\n')
    f.close()




1,将file_dir = "D:\CloudMusic\新建文件夹"的路径改为你网易云下载储存的路径,运行后得到songsname.txt 文件

import requests
import jsonpath

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
}
def choose_():
    print("——————————")
    print("1-网易")
    print("2-QQ")
    print("3-酷狗")
    print("4-酷我")
    types = int(input("请选择搜索引擎:"))
    if types == 1:
      type = "netease"
    elif types == 2:
      type = "qq"
    elif types == 3:
      type = "kugou"
    elif types == 4:
      type = "kuwo"
    else:
      print("输入有误,程序已退出!")
      exit()
    return type

def down_(music_list):
    count = 1
    for i in music_list:
      try:
            keyword = i
            data = {
                'input': keyword,
                'filter': 'name',
                'type': type,
                'page': '1'
            }
            url = "https://tool22.com/zb_tools/ajax.php?act=MusicTools"
            url_html = requests.post(url, headers=headers, data=data).json()
            titles = jsonpath.jsonpath(url_html, "$..title")
            authors = jsonpath.jsonpath(url_html, "$..author")
            urls = jsonpath.jsonpath(url_html, "$..url")
            lrcs = jsonpath.jsonpath(url_html, "$..lrc")
            hash = urls
            lrc2 = lrcs
            name = titles + " - " + authors

            save(name,lrc2,hash)
            print('已下载',count,'首')
            count += 1
      except:
            continue
def save(name,lrc2,hash):
    url_data = requests.get(hash, headers=headers).content
    with open(name + ".lrc", "w") as f:
      f.write(lrc2)
    with open(name + ".mp3", "wb") as f:
      f.write(url_data)
      print("——————————")
      print("{} —— 已下载".format(name))


def music_list():
    str_list = []
    str_ = ''
    fo = open("songsname.txt", "r",encoding='utf-8')
    str = fo.read()
    for i in str:
      if i != '\n':
            str_ += i
      else:
            str_list.append(str_)
            str_ = ''
    fo.close()
    return str_list

if __name__ == '__main__':
    type = choose_()
    music_list = music_list()
    down_(music_list)


2,将songsname.txt文件与本代码放到同一文件夹内,运行程序即可


再次感谢乐于分享的老哥们。辣眼代码水平见谅{:1_896:}

17601243856 发表于 2021-2-8 16:06

Python菜鸟帮顶,感谢楼主分享

阿跃蜀黍 发表于 2021-2-8 19:26

1678613071 发表于 2021-2-8 23:29

阿跃蜀黍 发表于 2021-2-8 19:26
看到我帖子了老哥加油,支持支持

嘿嘿 老哥牛
没咋搞懂 就基本都没动你的代码hahhhh
直接照搬

papapa 发表于 2021-2-9 01:46

这玩意儿不会用啊
页: [1]
查看完整版本: 自动下载歌单音乐