编写GUI Swing窗口实现爬取酷我音乐MP3格式
前言
代码简单易懂,全文注释,另外代码中包含了一点点的GUI窗口编写代码,如有不懂欢迎提问,同时也欢迎各位大佬多多指教,感谢阅读!
1.引入库
代码如下(示例):
from tkinter import *
from tkinter import messagebox
from PIL import Image,ImageTk
import requests
import json
2.代码主体
代码如下(示例):
def download():
def main():
# 歌手名称
geshou = str(entry1.get())
# 获取下载歌曲的名称
gequ = str(entry2.get())
for i in range(1, 6):
# https://www.kuwo.cn geshou,i
url = "http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={}&pn={}&rn=30&httpsStatus=1&reqId=2bf0b8c0-5f0a-11eb-8fd0-030dff96f987".format(
geshou, i)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko)Chrome/79.0.3945.88 Safari/537.36',
'Referer': 'http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6',
'csrf': 'GW5N3I6JE9Q',
'Cookie': '_ga=GA1.2.1345614870.1610439929; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1610439929,1610687692; _gid=GA1.2.1361641767.1610687692; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1610695451; kw_token=GW5N3I6JE9Q'
}
res = requests.get(url, headers=headers)
# print(res.text)
jsons = json.loads(res.text)
data = jsons['data']['list']
# print(data)
for i in data:
# 音乐rid
rid = i['rid']
# 音乐name
name = i['name']
if gequ == name:
# 拿到制定歌手歌曲的音乐路径
url = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1611579587926&httpsStatus=1&reqId=34295671-5f0d-11eb-b9d7-87102b654023".format(
rid)
result = requests.get(url, headers=headers).json()
print(result)
music_url = result['url']
# print(music_url)
with open('VIP音乐/{}.mp3'.format(name), 'wb')as f:
#需要在py文件夹目录下,新建一个叫做VIP音乐的文件夹,用于存放下载好的音乐。
print('正在下载{}'.format(name), end='')
music = requests.get(music_url)
f.write(music.content)
print('\t下载完毕')
#下面的这行代码表示的是添加窗口中的提示弹窗,需要添加 from tkinter import messagebox 这个库。
messagebox.showinfo(title='提示:', message='该歌曲已经下载完成!')
main() #执行定义的main()函数,进行下载歌曲。
#利用 tkinter 库创建GUI界面
#创建主窗口
root=Tk()
#定义root窗口的名称,设置界面相对于屏幕的位置
root.title('酷我VIP音乐下载器')
root.geometry('600x300+420+200')
#编辑第一个窗口中的标签,并设置该标签的位置,字体
label=Label(root,text=' 歌手名',font=('华文行楷',22),fg='red')
label.grid(row=0,column=0)
#编辑输入框内的字体,大小,及位置
entry1=Entry(root,font=('微软雅黑',17))
entry1.grid(row=0,column=1)
label=Label(root,text='歌曲名称',font=('华文行楷',20),fg='red')
label.grid(row=1,column=0)
entry2=Entry(root,font=('微软雅黑',17))
entry2.grid(row=1,column=1)
#开始编写按钮控件,设置控件所在位置
button=Button(root,text='开始下载',font=('微软雅黑',15),command=download)
#button.grid(row=2,column=2)
button.place(relx=0.7,rely=0.3)
label=Label(root,text='designed by Ma',font=('baiarial',18),fg='black')
#label.grid(row=5,column=2)
label.place(relx=0.6, rely=0.8)
#接下来的是在窗口中添加自己喜欢的图片,并且编辑位置
#需要导入 from PIL import Image,ImageTk 这个库,现在没有PIL库了,需要下载Pillow这个库。
img_gif = ImageTk.PhotoImage(file = 'tupian.jpg')
label_img = Label(root, image = img_gif)
label_img.place(relx=0.1, rely=0.3)
root.mainloop() #mainloop () 你可以把它看做是 while True: 即开使循环的执行程序,不会被动终止
该代码包含了一个大函数,该大函数中包含了一个小函数(主要负责下载指定歌曲)
总结
代码到这里就结束了,感谢阅读,如果哪里可以优化的话,欢迎各位大神帮忙指点一下,感谢帮助!