需要安装requests、bs4模块
安装方法:cmd进入控制台
pip install requests
pip install bs4
源码:
1 # -*- coding:utf-8 -*- 2 import requests,os,json 3 from bs4 import BeautifulSoup 4 5 print( 6 ''' 7 -------------------------------------- 8 9 网易云音乐歌单下载 10 11 by:冷溪凌寒 12 V 1.1 13 -------------------------------------- 14 ''' 15 ) 16 17 18 headers = { 19 'Connection': 'close', 20 'Referer': 'https://music.163.com/', 21 'Host': 'music.163.com', 22 'cookie':'', #自己获取 23 "Accept-Encoding": "identity", 24 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" 25 "user-agent":''#自己获取 26 } 27 s = requests.session() # 保持已登录状态 28 format = '{0:<10}\t{1:{3}<10}\t{2:<10}' # 输出规则 29 30 def get_list(url): # 获取歌单列表 31 try: 32 response = s.get(url, headers=headers).content # 获取网页 33 soup = BeautifulSoup(response, 'html.parser') # html格式 34 lis = list(soup.find('ul')) # 寻找ul标签 35 father_list = [str(soup.find('h2').string)] # 获取歌单名字到表[0] 36 for i in lis: 37 son_list = [] 38 son_list.append(str(len(father_list)) + '.') # 序号 39 son_list.append(i.a.string) # 歌曲名称 40 son_list.append(str(i.a.get('href'))[str(i.a.get('href')).find('=') + 1:-1] + str(i.a.get('href'))[-1]) # 歌曲链接 41 father_list.append(son_list) # 添加到列表 42 43 except: 44 print("\n\t歌曲链接输入错误") # 错误情况 45 exit('ERROR!') 46 47 print("从'{}'中找到了{}条歌曲".format(str(soup.find('h2').string), len(father_list) - 1)) 48 return father_list 49 50 51 def mkdir(dir):#创建文件夹 52 dir = dir.translate({ord(i): None for i in '/\\:*?"<>|'}) # 将 /\:*?"<>| 文件不能命名的符号去除 53 54 isExists=os.path.exists(dir)#判断是否创建了文件夹 55 if not isExists: 56 os.makedirs(dir)#创建文件夹 57 print("创建文件夹'%s',将图片放入'%s'文件夹内。"%(dir,dir)) 58 else: 59 print("已经有'%s'文件夹,将图片放入'%s'文件夹内。"%(dir,dir)) 60 61 62 def download(list):#根据歌曲列表下载歌曲 63 print('---------------------------------------------------------------------------------------------------') 64 print('序号 歌曲名称 歌曲链接') 65 for i in list: 66 if list.index(i)==0: 67 continue 68 else: 69 i[1] = i[1].translate({ord(i): None for i in '/\\:*?"<>|'}) # 将 /\:*?"<>| 文件不能命名的符号去除 70 71 print(format.format(i[0], i[1], 'http://music.163.com/song/media/outer/url?id=' + i[2] + '.mp3', chr(12288))) # 排版 72 # song_url = "https://link.hhtjim.com/163/" + i[2] + ".mp3" # 外链地址 73 74 temp_url = "https://api.imjad.cn/cloudmusic/?type=song&id=" + i[2] # 外链地址 75 temp_jsons = requests.get(temp_url).text 76 temp_list=json.loads(temp_jsons).get('data') 77 song_url=temp_list[0]["url"] 78 song = requests.get(song_url).content # 获取歌曲源 79 with open(list[0] +'/'+ i[1] + '.mp3', 'wb') as f: # 写入文件夹 80 f.write(song) 81 f.close() 82 83 print('---------------------------------------------------------------------------------------------------') 84 print('下载结束!') 85 86 def download_song(id,url):#根据歌曲列表下载歌曲 87 response = s.get(url, headers=headers).content # 获取网页 88 soup = BeautifulSoup(response, 'html.parser') # html格式 89 name = str(soup.find('em').string) # 获取歌曲名 90 print('---------------------------------------------------------------------------------------------------') 91 name = name.translate({ord(i): None for i in '/\\:*?"<>|'}) # 将 /\:*?"<>| 文件不能命名的符号去除 92 print(format.format(1, name, 'http://music.163.com/song/media/outer/url?id=' + id + '.mp3', chr(12288))) # 排版 93 94 temp_url = "https://api.imjad.cn/cloudmusic/?type=song&id=" + id # 外链地址 95 temp_jsons = requests.get(temp_url).text 96 temp_list=json.loads(temp_jsons).get('data') 97 song_url=temp_list[0]["url"] 98 song = requests.get(song_url).content # 获取歌曲源 99 with open(name + '.mp3', 'wb') as f: # 写入文件夹 100 f.write(song) 101 f.close() 102 103 print('---------------------------------------------------------------------------------------------------') 104 print('下载结束!') 105 106 choose=input("请选择下载模式\n1为根据歌单ID下载列表歌曲\n2为根据歌曲ID下载单首歌曲\n") 107 if(choose=="1"): 108 search=input("请输入歌单ID:") 109 url="https://music.163.com/playlist?id="+search # 歌单地址 110 music_list=get_list(url) # 获取歌单列表 111 mkdir(music_list[0]) # 创建文件夹 112 download(music_list) # 通过歌单列表下载音乐 113 elif(choose=="2"): 114 search=input("请输入歌曲ID:") 115 url="https://music.163.com/song?id="+search # 歌曲地址 116 download_song(search,url) 117 else: 118 print("输入错误!")
cookie与user-agent获取方法:
登录后进入https://music.163.com/
找到后写入代码中即可