目录
呼噜呼噜~~~学习记录:
tkinter 是 Python
编程语言中描述用于构建图形用户界面 。
一、初识Tkinter
-
第一个tkinter 程序
from tkinter import *
window = Tk() # 调用Tk()创建主窗口
window.config(background='lavender') # 可以自己设置窗口的背景颜色
window.title('我学Python') # 设置标题
window.geometry('800x700+1000+100') # 设置窗口出现展示的位置和大小
window.mainloop() # 开启主循环,让窗口处于显示状态
运行结果:
二、获取kw音乐数据
先来到目标网址,因为我们是想模拟音乐下载器,所以,我们先随便在搜索框里搜一首歌曲。来到如下页面:
对于上图,用户在搜索框中进行内容输入,会得到其想要的数据。还是先查看网页源代码:
这样的话,就去看看服务器返回的数据包有没有我们想要的数据:在这里找到:
但是在上面这个数据包里检索,并没有找到我们要的url;
随便点击一首歌曲进去看看:
但是去看它的请求接口后发现:我们缺少请求参数。而这个数据包里是找不到的~~~~~对于下面这些参数去一次一次的裁剪尝试后: mid 这个参数是一定要有的。
到我们第一次抓包的页面去看看:检索后找到目标
再就是参数:
- 拿歌曲mid或其他参数的请求接口参数:
- 拿歌曲 url 接口参数:
"""
2022年
CSDN:抄代码抄错的小牛马
"""
import json
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36',
'Cookie': '_ga=GA1.2.1488821466.1643709918; _gid=GA1.2.1597774305.1643709918; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1643709917,1643710270; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1643710270; kw_token=D2RU31MX5SN',
'Referer': 'http://www.kuwo.cn/search/list?key=%E5%B0%8F%E9%98%BF%E4%B8%83',
'csrf': 'D2RU31MX5SN' # 反爬 随便弄个就OK
}
def get_song():
name = input("请输入:")
data = {
'key': name
}
url = 'https://kuwo.cn/api/www/search/searchMusicBykeyWord'
resp = requests.get(url=url, headers=headers, params=data).json()
data_dic = resp['data']['list']
_id = [_id["rid"] for _id in data_dic][0]
print(_id)
rel_url = 'https://kuwo.cn/api/v1/www/music/playUrl'
rel_data = {
'mid': _id
}
song_name = [song_name["name"] for song_name in data_dic][0]
char = '《,》?,|' # 去掉特殊字符
for i in char:
song_name = song_name.replace(i, '')
print(song_name)
song_resp = requests.get(url=rel_url, headers=headers, params=rel_data).text
song_dic = json.loads(song_resp)
down_url = song_dic['data']['url']
print(down_url)
if __name__ == '__main__':
get_song()
运行来看看:这里要说名的是,代码是选去搜索结果的第一条。
"""
2022年
CSDN:抄代码抄错的小牛马
"""
from tkinter import *
window = Tk() # 将窗口赋予给 root 这个对象
window.config(background='lavender') # 可以自己设置窗口的背景颜色
window.title('kw音乐下载器') # 设置标题
window.geometry('800x700+1000+100') # 设置窗口出现展示的位置和大小
window.iconphoto(False, PhotoImage(file="kw.png")) # 更改左上角窗口的的图标
# 输入提示和输入框
label = Label(window, bg='LightGreen', text='请输入您想下载歌曲的名字:', ).grid()
enter = Entry(window, bg='PaleTurquoise2', ).grid(row=0, column=1, sticky="w", padx=100, pady=5)
# 文本框展示
text = Listbox(window, font=('隶书', 18), width=38, heigh=25, bg='Cyan').grid(row=2, column=0)
# 下载和退出程序按钮
b1 = Button(window, text="开始下载", font=('隶书', 10), bg='RosyBrown1').grid(row=3, column=0, sticky="w", padx=150, pady=5)
b2 = Button(window, text="退出程序", font=('隶书', 10), bg='RosyBrown1', command=window.quit).grid(row=3, column=1,
sticky="w", padx=200,
pady=5, )
window.quit() # 退出程序
window.mainloop() # 显示我们设置的窗口
这里我是改了左上角的图标了,我在网上找图片,且是 png 格式,我把他放在下图位置的:
看看结果:~~~~有点简陋,哈哈哈哈,,
三、kw音乐下载器之功能简单实现
我们想要实现的简易功能就是:操作者在文本框里进行输入后会有歌曲数据的呈现,点击 开始下载按钮,歌曲就会下载并保存在本地;并会提示操作者其下载是否完成。点击 退出按钮,就会结束程序。
"""
2022年
CSDN:抄代码抄错的小牛马
"""
from tkinter import *
import urllib.request
import json
import requests
import time
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36',
'Cookie': '_ga=GA1.2.1488821466.1643709918; _gid=GA1.2.1597774305.1643709918; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1643709917,1643710270; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1643710270; kw_token=D2RU31MX5SN',
'Referer': 'http://www.kuwo.cn/search/list?key=%E5%B0%8F%E9%98%BF%E4%B8%83',
'csrf': 'D2RU31MX5SN' # 反爬 随便弄个就OK
}
window = Tk() # 将窗口赋予给 root 这个对象
window.config(background='lavender') # 可以自己设置窗口的背景颜色
window.title('酷我音乐下载器') # 设置标题
window.geometry('800x700+1000+100') # 设置窗口出现展示的位置和大小
window.iconphoto(False, PhotoImage(file="kw.png")) # 更改左上角窗口的的图标
# 输入提示和输入框
label = Label(window, bg='LightGreen', text='请输入您想下载歌曲的名字:', ).grid()
entry = Entry(window, bg='PaleTurquoise2')
entry.grid(row=0, column=1)
# 文本框展示
text = Listbox(window, font=('隶书', 18), width=38, heigh=25, bg='Cyan')
text.grid(row=2, column=0)
def get_song():
# name = input("请输入:")
name = entry.get()
data = {
'key': name
}
url = 'https://kuwo.cn/api/www/search/searchMusicBykeyWord'
resp = requests.get(url=url, headers=headers, params=data).json()
data_dic = resp['data']['list']
_id = [_id["rid"] for _id in data_dic][0]
# print(_id)
rel_url = 'https://kuwo.cn/api/v1/www/music/playUrl'
rel_data = {
'mid': _id
}
song_name = [song_name["name"] for song_name in data_dic][0]
char = '《,》?,|' # 去掉特殊字符
for i in char:
song_name = song_name.replace(i, '')
print(song_name)
song_resp = requests.get(url=rel_url, headers=headers, params=rel_data).text
song_dic = json.loads(song_resp)
down_url = song_dic['data']['url']
print(down_url)
text.insert(END, '歌曲:%s正在下载...' % song_name)
text.see(END)
text.update()
urllib.request.urlretrieve(url=down_url, filename='./song/%s.mp3' % song_name)
text.insert(END, '歌曲:%s已下载完成,请试听!!!' % song_name)
text.see(END)
text.update()
time.sleep(2)
if __name__ == '__main__':
# 下载和退出程序按钮
b1 = Button(window, text="开始下载", font=('隶书', 10), bg='RosyBrown1', command=get_song).grid(row=3, column=0,
sticky="w",
padx=150, pady=5)
b2 = Button(window, text="退出程序", font=('隶书', 10), bg='RosyBrown1', command=window.quit).grid(row=3, column=1,
sticky="w", padx=200,
pady=5, )
window.quit() # 退出程序
window.mainloop() # 显示我们设置的窗口
运行看看:
在本地查看:
都没什么问题,那这个简易下载器就完成了。当然,在文本输入框哪里,是可以自己输入歌手的名字进行下载,代码就去掉对应的索引 [0] 就行了。但问题就是:歌手他的歌曲有很多,我们去下载会遇到歌曲不能下载而报错,还会遇到:界面卡死,退出出现很慢或直接卡死。
ok~~~~~bye~~~~