学习python总结 - 下载网易云音乐单首歌曲
本帖最后由 快乐的小萌新 于 2020-3-14 19:34 编辑安装几个包就可以使用了
pip install requests
pip install tkinter
也没什么技术含量
有个窗口,输入连接就可以下载了
import reimport requests
import tkinter as tk
import tkinter.messagebox
# URL = https://music.163.com/#/song?id=1381755293
# 获取url中的歌曲id=1381755293
def getid(url):
print(url)
compile_id=re.compile(r'song.(.*?)',re.S)#正则匹配链接里面的id
id_url = re.split(compile_id,url)#分割出来匹配的内容
return id_url[2] #返回分割出来的元素
# 把id传进来
def get_url(songid):
# 这个链接是万能的下载网易云的,只需要你更换id号
url = 'http://music.163.com/song/media/outer/url?'+songid+'.mp3'
returnurl
#解析替换好id的url,解析出二进制代码
def parse_url(url):
headers={
'User-Agent': 'Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 78.0.3904.97Safari / 537.36'
}
response = requests.get(url,headers=headers)
#返回歌曲二进制的代码
return response.content
#获取歌曲的名字
def parse_name(url):
# 替换链接中的/#,不然无法获取到数据
url = url.replace('/#','')
#请求头文件
headers = {
'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'accept-encoding':'gzip, deflate, br',
'accept-language':'zh-CN,zh;q=0.9',
'cookie':'_iuqxldmzr_=32; _ntes_nnid=c59ed51e9697ed4642b646942b46bbc8,1576941133686; _ntes_nuid=c59ed51e9697ed4642b646942b46bbc8; WM_NI=DSZ%2FGkHxi32BLrNlcwnPq4U0J5GaDb%2FANMPMGU5oI4iK9%2FfRowFCLelDRiwcM1INriNDxTE7uEU1Q1s6rvmtS69epv054SZJkohIat3Xol%2FIdIYdSgojP1ACHpS4QoM2Y1U%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee82c254ba9eaf99d945a68e8eb6c85e839b9baff37ff3b38db7db5ba1efa8d4ef2af0fea7c3b92a888d96d0c6618ca8a7d4b14a90ae828de27dae90bfd5d83c8aeb8982c76aed9f82aed347858bfb90cc40ab95f7d0e55aada98aa4cf6fb09c9e8af6698fef87aff1638e9cb8b5c83db79b9bd2d43bb1eabe97f08091eaf786f37ef4ebfcb4d942a9b1a8aae480f188a18dae43a8979785d26dadb6a0d2c4498cb09dd5d4658fee97d2d837e2a3; WM_TID=d6p47C9W01lBVEVFUVY97ljXVHVZx1mg; JSESSIONID-WYYY=D%2BESH1p5kzoAHro%2F1G5EPti7bkikxreSa8EuhynyhAH6jpnF2aRm%2F%2BtlPBov8cf0jPSknfI5z2em8nnMgq4AhopgQKJg2rXnZqqwDzKsHaGHXd5Je%2FFXyU9CG29kDKxDUZFnnfHAZ%5CybbOS7ZRvSaO49WNX%2FMlmq9szk2nwgCD8xierj%3A1576991817201',
'referer': 'https://music.163.com/',
'sec-fetch-mode': 'nested-navigate',
'sec-fetch-site': 'same-origin',
'upgrade-insecure-requests': '1',
'user-agent': 'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14'
}
#请求返回的数据
response = requests.get(url, headers=headers)
# 解析数据为html代码
data = response.text
# 用正则提取出歌曲名
pattern = re.compile('<title>(.*?)-(.*?)-',re.S)
names = re.findall(pattern,data)
#拼接歌曲名和歌手名字
for name in names:
name =name[0]+'-'+name[1]+'.mp3'
return name
# 保存歌曲
def save_mp3(data,name):
with open(name,'wb') as f:
f.write(data)
f.close()
def mian():
# 获取输入框中的歌曲链接
url = e.get()
#解析出歌曲链接的歌曲名
name = parse_name(url)
#解析出歌曲的id号
songid= getid(str(url))
# 将id号传入,获取到歌曲的下载链接
mp3_url = get_url(songid)
# 将下载链接传入,获取到歌曲的数据
data = parse_url(mp3_url)
#传入数据和歌曲名
save_mp3(data,name)
#下载完成,弹出对话框
tk.messagebox.askokcancel(title = '注意~',message='下载完成')
# 设置窗口
window = tk.Tk()
# 窗口的名字
window.title('下载网易云音乐')
# 窗口的长宽
window.geometry('400x100')
# 设置输入窗口,50宽
e = tk.Entry(width=50)
# 把输入框打包进弹窗中
e.pack();
# 设置两个插入按钮
b1 = tk.Button(text='开始下载', width=10, height=1, command=mian)
# 把按钮打包进弹窗中
b1.pack()
#加载显示窗口
window.mainloop()
window.mainloop()
虽然看不懂 但感谢楼主分享 感谢楼主分享 学习学习 确实没看明白{:1_904:} coming 发表于 2020-3-7 19:16
确实没看明白
有点python的requests基础就能懂 完全看不懂,麻烦更详细一点 mu_yue 发表于 2020-3-12 18:46
完全看不懂,麻烦更详细一点
等下我写点批注吧 谢谢楼主,拿来学习学习
页:
[1]