<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
當前很多人在閒暇時喜歡聽音樂,那麼基於這種現象,我也是肝了幾個小時完成了基於python的個性化音樂播放器,現在分享給你們。
python3.5 以上版本就行
tkinter (python 自帶的用於圖形化使用者介面開發的模組)
requests(爬蟲模組)
Chrome 瀏覽器
等等
音樂下載器功能:
(1)、使用者輸入想要下載的歌曲或關鍵字名稱
(2)、程式獲取使用者所輸入的歌曲名稱關鍵字,根據該“關鍵字”向網站發起資料請求
(3)、程式根據返回的資料資訊,進行分析後,呈現清單的形式給使用者
(4)、使用者點選清單所顯示所顯示的相應歌曲,點選下載,便可下載該歌曲
# 建立視窗 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=MULTIPLE listbox = 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/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1616159211200&httpsStatus=1&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) #反反爬headers headers = { '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/list?key=%E7%83%AD%E7%88%B1105%C2%B0C%E7%9A%84%E4%BD%A0', 'csrf': '0BXQD7I99LN', 'Cookie': '', }
這裡的cookie是保持你的登入狀態的,相當於驗證你的身份,寫上你自己的即可。
這裡的csrf與cookie寫你自己的就行,原始碼中我會空著,注意修改。還有,複製cookie之前先在網站登入,cookie會
記錄你的登入狀態,不登入不行哦
這裡的cookie和csrf在第一次請求的header中,如下圖
原始碼
程式碼在這,拿走不謝~~~
import requests import random import json import re import os import tkinter from 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) #反反爬headers headers = { '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/list?key=%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/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1616159211200&httpsStatus=1&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=MULTIPLE listbox = 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()
效果圖
看了圖,是不是感覺很nice!
以上就是python網路爬蟲實現個性化音樂播放器範例解析的詳細內容,更多關於python實現音樂播放器的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45