初识Tkinter,学习记录

目录

一、初识Tkinter 

第一个tkinter 程序

二、获取kw音乐数据

目标网址分析

 代码实现

获取音乐数据代码:

 酷我tkinter界面设置

kw界面代码 :

三、kw音乐下载器之功能简单实现

下载器功能介绍

代码整合:


呼噜呼噜~~~学习记录:

tkinter 是 Python 编程语言中描述用于构建图形用户界面 。

一、初识Tkinter 

  • 第一个tkinter 程序

from tkinter import *

window = Tk()  # 调用Tk()创建主窗口

window.config(background='lavender')  # 可以自己设置窗口的背景颜色
window.title('我学Python')  # 设置标题
window.geometry('800x700+1000+100')  # 设置窗口出现展示的位置和大小

window.mainloop()  # 开启主循环,让窗口处于显示状态

运行结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_20,color_FFFFFF,t_70,g_se,x_16

二、获取kw音乐数据

  • 目标网址分析

先来到目标网址,因为我们是想模拟音乐下载器,所以,我们先随便在搜索框里搜一首歌曲。来到如下页面:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_20,color_FFFFFF,t_70,g_se,x_16

 对于上图,用户在搜索框中进行内容输入,会得到其想要的数据。还是先查看网页源代码:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_20,color_FFFFFF,t_70,g_se,x_16

 这样的话,就去看看服务器返回的数据包有没有我们想要的数据:在这里找到: 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_20,color_FFFFFF,t_70,g_se,x_16

  但是在上面这个数据包里检索,并没有找到我们要的url;

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_17,color_FFFFFF,t_70,g_se,x_16

  随便点击一首歌曲进去看看:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_20,color_FFFFFF,t_70,g_se,x_16

  但是去看它的请求接口后发现:我们缺少请求参数。而这个数据包里是找不到的~~~~~对于下面这些参数去一次一次的裁剪尝试后: mid 这个参数是一定要有的。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_15,color_FFFFFF,t_70,g_se,x_16

  到我们第一次抓包的页面去看看:检索后找到目标

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_20,color_FFFFFF,t_70,g_se,x_16

 再就是参数:

  • 拿歌曲mid或其他参数的请求接口参数:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_19,color_FFFFFF,t_70,g_se,x_16

  •  拿歌曲 url 接口参数:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_17,color_FFFFFF,t_70,g_se,x_16

  •  代码实现

  • 获取音乐数据代码:

"""
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()

运行来看看:这里要说名的是,代码是选去搜索结果的第一条。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_20,color_FFFFFF,t_70,g_se,x_16

  •  酷我tkinter界面设置

  • kw界面代码 :

"""
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 格式,我把他放在下图位置的:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_20,color_FFFFFF,t_70,g_se,x_16

 看看结果:~~~~有点简陋,哈哈哈哈,,

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_20,color_FFFFFF,t_70,g_se,x_16

三、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()  # 显示我们设置的窗口

运行看看:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_20,color_FFFFFF,t_70,g_se,x_16

  在本地查看:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oqE5Luj56CB5oqE6ZSZ55qE5bCP54mb6ams,size_20,color_FFFFFF,t_70,g_se,x_16

都没什么问题,那这个简易下载器就完成了。当然,在文本输入框哪里,是可以自己输入歌手的名字进行下载,代码就去掉对应的索引   [0]  就行了。但问题就是:歌手他的歌曲有很多,我们去下载会遇到歌曲不能下载而报错,还会遇到:界面卡死,退出出现很慢或直接卡死。


ok~~~~~bye~~~~

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抄代码抄错的小牛马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值