运维开发网

python网络爬虫个性化音乐播放器演示实例分析

运维开发网 https://www.qedev.com 2022-10-11 14:25 出处:网络
这篇文章主要为大家介绍了使用python网络爬虫实现个性化音乐播放器的详细示例代码以及内容解析,有需要的朋友?可以借鉴参考下希望能够有所帮助

这篇文章主要为大家介绍了使用python网络爬虫实现个性化音乐播放器的详细示例代码以及内容解析,有需要的朋友?可以借鉴参考下希望能够有所帮助


前言

目前很多人喜欢在业余时间听音乐,所以基于这个现象,我也花了几个小时完成了一个基于python的个性化音乐播放器,现在分享给大家。


开发组件

Python3.5版本3.5以上会做
tkinter
请求
Chrome浏览器
等等。


功能

音乐下载器功能:

(1)用户输入要下载的歌曲名或关键字。

(2)程序获取用户输入的歌名关键词,并根据ldquo关键词rdquo向网站发起数据请求

(3)在分析返回的数据信息之后,程序将列表呈现给用户。

(4)用户可以通过点击列表中显示的相应歌曲并点击下载来下载该歌曲。


流程分析



基于python的个性化音乐下载器模块详细


(一)前端模块# 创建窗口window = tkinter.Tk()#设置标题window.title('音乐下载器',)#设置窗口大小及位置window.geometry('900x460+500+100')#标签组件lab = Label(window,text='请输入要下载的歌曲:',font=('华文行楷',15))# #标签定位lab.grid(row=0,column=0)#输入框组件entry = Entry(window,font=('隶书',20),width=20)entry.grid(row=0,column=1)#搜索按钮btn = Button(window,text='搜索',font=('隶书',15),width=20,command=get_music_list)btn.grid(row=0,column=2)#列表框 #可以设置多选,selectmode=MULTIPLElistbox = Listbox(window,font=('隶书',16),width=45,heigh=15)listbox.grid(row=1,columnspan=2)listbox_1 = Listbox(window,font=('隶书',16),width=35,heigh=15)listbox_1.grid(row=1,column=2)#下载按钮btn_1 = Button(window,text='开始下载',font=('隶书',15),command=get_music_url)btn_1.grid(row=2,column=0)#退出按钮btn_2 = Button(window,text='退出程序',font=('隶书',15),command=window.quit)btn_2.grid(row=2,column=2)# 消息循环显示界面window.mainloop()

代码中的Cammand用于绑定后端函数。
这段代码是用来实现可视化和用户交互的。这一块我就不多说了。可以自己学习python自带的tkinter模块,效果如图。



(二)后端模块

1.分析

进入酷我音乐网站。

我们先把这些歌名往下爬,然后添加到前端列表框。

具体功能如下

#获取音乐搜索列表的函数def get_music_list():#获取前端搜索框中输入的内容 name = entry.get() #下一次搜索的时候清空列表框用于显示新的歌单 listbox.delete(0, END) #循环加载三页音乐 for k in range(1,4): url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord' data = { 'key': name, 'pn': k, 'rn': '30', 'httpsStatus': '1', 'reqId': '161cbd51-cde1-11eb-bf58-bba623268fbb' } response = requests.get(url=url,headers=headers,params=data,proxies=proxy).text dic_data = json.loads(response) list_data = dic_data['data']['list'] #listbox.delete(0,END) for i in list_data: music_name = i['name']+'-'+i['artist'] #在列表框中插入音乐名称 listbox.insert(END, music_name) music_id = i['rid'] list_1.append(music_id)

此时,音乐列表被添加到列表框中。注意,我们已经将所有音乐的rid添加到list_1的列表中。每个RID的索引对应列表框中音乐名称的索引,是点击下载对应歌曲的关键。然后我们需要实现点击下载功能。

具体功能如下

#解析音乐url的函数def get_music_url(): index = listbox.curselection() #返回选取的索引,是一个元组 for i in index: music_name = listbox.get(i) listbox_1.insert(END, music_name + ' 开始下载') url = 'http://www.kuwo.cn/urlformat=mp3amp;rid={}amp;response=urlamp;type=convert_url3amp;br=128kmp3amp;from=webamp;t=1616159211200amp;httpsStatus=1amp;reqId=f8586c01-88b3-11eb-b442-d7b57b6d2564'.format(list_1[i]) music_data = requests.get(url=url,headers=headers,proxies=proxy).text #print(music_data) e = '{"code": 200, "msg": "success", "url": "(.*)"}' music_url = re.findall(e, music_data, re.S)[0] #print(music_url) download_music(music_url,music_name)

最后下载保存。

具体功能如下

#在当前目录创建文件夹,用于存放下载的音乐if not os.path.exists('酷我音乐'): os.mkdir('酷我音乐')#下载音乐并且保存的函数def download_music(url,music_name): music_name = music_name+".mp3" music = requests.get(url=url,proxies=proxy).content path = '酷我音乐/' + music_name with open(path, 'wb') as fp: fp.write(music) listbox_1.insert(END, music_name+' 下载完成!')

同时,当我们用python写爬虫的时候,我们也会被爬取。下面的代码是一个反爬行措施。

#ip代理池ip = ['{"HTTP":"175.42.129.105"}','{"HTTP":"121.232.148.97"}','{"HTTP":"121.232.148.72"}']proxy = random.choice(ip)proxy = json.loads(proxy)#反反爬headersheaders = { 'User - Agent': 'Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/90.0.4430.85Safari/537.36', 'Referer': 'http://www.kuwo.cn/search/listkey=%E7%83%AD%E7%88%B1105%C2%B0C%E7%9A%84%E4%BD%A0', 'csrf': '0BXQD7I99LN', 'Cookie': '',}

这里的cookie是保存你的登录状态,相当于验证你的身份,自己写的。

在这里写自己的csrf和cookie就行了,我会空在源代码里。注意修改。此外,在复制cookies之前,请登录网站。饼干会

记录你的登录状态,不登录不行。

这里,cookie和csrf在第一个请求的头部,如下所示


源代码

这是代码。不客气拿去~ ~ ~

import requestsimport randomimport jsonimport reimport osimport tkinterfrom tkinter import *list_1 = [] #放置音乐rid的列表#ip代理池ip = ['{"HTTP":"175.42.129.105"}','{"HTTP":"121.232.148.97"}','{"HTTP":"121.232.148.72"}']proxy = random.choice(ip)proxy = json.loads(proxy)#反反爬headersheaders = { 'User - Agent': 'Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/90.0.4430.85Safari/537.36', 'Referer': 'http://www.kuwo.cn/search/listkey=%E7%83%AD%E7%88%B1105%C2%B0C%E7%9A%84%E4%BD%A0', 'csrf': '', #填你的 'Cookie': '', #填你的}#在当前目录创建文件夹,用于存放下载的音乐if not os.path.exists('酷我音乐'): os.mkdir('酷我音乐')#下载音乐并且保存的函数def download_music(url,music_name): music_name = music_name+".mp3" music = requests.get(url=url,proxies=proxy).content path = '酷我音乐/' + music_name with open(path, 'wb') as fp: fp.write(music) listbox_1.insert(END, music_name+' 下载完成!')#解析音乐url的函数def get_music_url(): index = listbox.curselection() #返回选取的索引,是一个元组 for i in index: music_name = listbox.get(i) listbox_1.insert(END, music_name + ' 开始下载') url = 'http://www.kuwo.cn/urlformat=mp3amp;rid={}amp;response=urlamp;type=convert_url3amp;br=128kmp3amp;from=webamp;t=1616159211200amp;httpsStatus=1amp;reqId=f8586c01-88b3-11eb-b442-d7b57b6d2564'.format(list_1[i]) music_data = requests.get(url=url,headers=headers,proxies=proxy).text #print(music_data) e = '{"code": 200, "msg": "success", "url": "(.*)"}' music_url = re.findall(e, music_data, re.S)[0] #print(music_url) download_music(music_url,music_name)#获取音乐搜索列表的函数def get_music_list(): name = entry.get() listbox.delete(0, END) #循环表示加载三页音乐 for k in range(1,4): url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord' data = { 'key': name, 'pn': k, 'rn': '30', 'httpsStatus': '1', 'reqId': '161cbd51-cde1-11eb-bf58-bba623268fbb' } response = requests.get(url=url,headers=headers,params=data,proxies=proxy).text dic_data = json.loads(response) list_data = dic_data['data']['list'] #listbox.delete(0,END) for i in list_data: music_name = i['name']+'-'+i['artist'] listbox.insert(END, music_name) music_id = i['rid'] list_1.append(music_id)# 创建窗口window = tkinter.Tk()#设置标题window.title('音乐下载器',)#设置窗口大小及位置window.geometry('900x460+500+100')#标签组件lab = Label(window,text='请输入要下载的歌曲:',font=('华文行楷',15))# #标签定位lab.grid(row=0,column=0)#输入框组件entry = Entry(window,font=('隶书',20),width=20)entry.grid(row=0,column=1)#搜索按钮btn = Button(window,text='搜索',font=('隶书',15),width=20,command=get_music_list)btn.grid(row=0,column=2)#列表框 #可以设置多选,selectmode=MULTIPLElistbox = Listbox(window,font=('隶书',16),width=45,heigh=15)listbox.grid(row=1,columnspan=2)listbox_1 = Listbox(window,font=('隶书',16),width=35,heigh=15)listbox_1.grid(row=1,column=2)#下载按钮btn_1 = Button(window,text='开始下载',font=('隶书',15),command=get_music_url)btn_1.grid(row=2,column=0)#退出按钮btn_2 = Button(window,text='退出程序',font=('隶书',15),command=window.quit)btn_2.grid(row=2,column=2)# 消息循环显示界面window.mainloop()

翻译


看图,不觉得好看吗!

以上是python网络爬虫实现个性化音乐播放器的详细内容。更多关于python实现音乐播放器的信息

0

精彩评论

暂无评论...
验证码 换一张
取 消