音乐下载器(本软件不得用于商业用途,仅做学习交流)
-
最近学了python 小试牛刀 试写了个网易云音乐下载器 可惜学得不精 只能下载能听到的歌曲 收费歌曲无能为力
-
使用挺简单的 就是 把要听的歌单地址复制到软件中 按下载就行了
-
按打开网站 进入网易云音乐
选择一个自己喜欢的歌单或者歌曲 复制地址
用键盘 ctrl+v 黏贴到软件地址栏中 点击下载 速度还是挺快的 一下就完了
源码
import requests
import re
from lxml import etree
import os
import sys
class wangyi():
def __init__(self,song_url):
self.song_url = song_url
self.headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Referer': 'https://music.163.com/',
'Cookie': '_ntes_nuid=82fe201e46ba20e35d71ea7cb8ed32ce; _ntes_nnid=5cacaa7e37865185c6b2b20068aad68c,1529282484747; vjuids=57ef2709a.1643ad09a2e.0.065ebb025e1d3; __gads=ID=b835044bd90d4e10:T=1529995115:S=ALNI_MYTScfuvc2qpFIrZ-pnK5IA0WJEkQ; UM_distinctid=1645f8b11262ef-0a7fa78057d613-354c5266-13c680-1645f8b1127869; vjlast=1529995107.1530611308.13; vinfo_n_f_l_n3=5590f0ea0628c407.1.0.1530611307976.0.1530611328585; _iuqxldmzr_=32; WM_TID=R1Q8g4fF1%2FNmJwUV2QJKNLplmHcihvkN; JSESSIONID-WYYY=juyX%2FnJy99HtxQpJ%2F%2B8Wm%5CIsueiGiXXVtY2RxBw6aYeW0zC%5CQW5XJk6H4j2OB4VJA%2FDvavvWktYpFxD9QgXAdvZUl70CeUdy7VT%5C0yx5%2FSdZCDZzDGB8ixRf0ig%2Frr9QaGkuGdk6NZ0b0yewSiiE9yyhy%5CAS%5COpcW%2BuWba4vhjg2r6Ed%3A1533282780991; __utma=94650624.327510760.1533261565.1533265523.1533280981.3; __utmc=94650624; __utmz=94650624.1533280981.3.2.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; WM_NI=qzyyohObhtCNa%2BOok8crvWqAiDgEeDecnjAhPtiEtYa02iM8fmPkRdSbITIo%2FqIF7GanqvYK0Zcy4njfh%2F7S%2FChPB04G%2Ba5t9MjXAoeBREBHdRf1Ki0nJJKKohzMC7%2BVWWI%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee95eb3c869ba282ec68b29e8eaed37995b6fb89c1219ab5bf93c765b199bfa4f22af0fea7c3b92ab3a6b79aee648dbea895c246a3f58190ea34a1aebab8f44bab9ca9a6e850a7bda28bc46494aca7a6f753a3f0fe8ad034a6b3a08cd17091be87b5cc65edaf87a7b64da3b2bf97dc41f486ad9ab766aabaa8d0b659ed9da8b1c13cf899e582b880fb93a6b9c465a79e9ea6c144a88eaad2ca63f4b286abca41adb8b6aec23de98a99b8cc37e2a3; __utmb=94650624.3.10.1533280981'
}
def single(self):
print('正在努力地下载 请稍等')
self.song_url = self.song_url.replace("#/","")
sid = re.findall('\d+',self.song_url)[1]
title = re.findall('\"title\": \"(.*?)\"',requests.get(self.song_url,headers=self.headers).content.decode())[0]
ll = [':','\"','<','>','(',')','?','\'','-','\\','/','*']
for l in ll:
title = title.replace(l,'')
temp = "http://music.163.com/song/media/outer/url?id={}.mp3"
url = temp.format(sid)
mp =requests.get(url,headers=self.headers).content
with open(title+'.mp3','wb') as f:
f.write(mp)
print("下载完毕")
def run(self):
if re.findall('https://music.163.com/#/song\?id=(.*?)',self.song_url):
self.single()
else:
print('正在努力地下载 请稍等')
self.song_url = self.song_url.replace("#/","")
html =requests.get(self.song_url,headers=self.headers).content
html =etree.HTML(html)
base = re.findall('\d+',self.song_url)[1]
try:
os.mkdir(base)
except Exception as e:
pass
html =html.xpath("//ul[@class='f-hide']/li")
for h in html:
sid = h.xpath("./a/@href")
sid = re.findall('\d+',sid[0])[0]
title = h.xpath("./a/text()")[0]
ll = [':','\"','<','>','(',')','?','\'','-','\\','/','*']
for l in ll:
title = title.replace(l,'')
title = ".\{}\{}.mp3".format(base,title)
temp = "http://music.163.com/song/media/outer/url?id={}.mp3"
url = temp.format(sid)
mp =requests.get(url,headers=self.headers).content
with open(title,'wb') as f:
f.write(mp)
print(title)
print("下载完毕")
if __name__ == '__main__':
url = sys.argv[1]
w = wangyi(url)
w.run()
from tkinter import *
from tkinter import ttk
import tkinter.messagebox
from wangyiyun import wangyi
import webbrowser
import threading
def calcPlus():
print('开始下载音乐')
links =link.get()
wan = wangyi(links)
wan.run()
text ='下载音乐完毕'
tkinter.messagebox.showinfo('提示',text)
def getweb():
webbrowser.open("https://music.163.com/")
def thread_it():
'''将函数打包进线程'''
# 创建
t = threading.Thread(target=calcPlus)
# 守护 !!!
t.setDaemon(True)
# 启动
t.start()
if __name__ == '__main__':
root = Tk()
root.title('网易云音乐歌单下载器--by 每天一游戏')
link = StringVar()
lb = tkinter.Listbox()
f1 = Frame(root)
f1.pack(padx=10,pady=5)
Label(f1, text="要下载的音乐歌单:").grid(row=0,column=0)
f1r = Frame(f1)
f1r.grid(row=0, column=1)
e1 = Entry(f1r, textvariable=link, width=50).grid(row=0,column=1)
Button(f1r, text="下载", command=thread_it).grid(row=0, column=2)
Button(f1r, text="打开网站", command=getweb).grid(row=0, column=3)
mainloop()