编写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: 即开使循环的执行程序,不会被动终止

该代码包含了一个大函数,该大函数中包含了一个小函数(主要负责下载指定歌曲)


总结

代码到这里就结束了,感谢阅读,如果哪里可以优化的话,欢迎各位大神帮忙指点一下,感谢帮助!