成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

python實現音樂播放和下載小程序功能

瀏覽:7日期:2022-07-27 14:09:42

(本篇部分代碼綜合整理自B站,B站有手把手說明的教程)

1.網易云非付費內容爬取器(聲明:由于技術十分簡單,未到觸犯軟件使用規則的程度)驅動Edge瀏覽器(自己寫驅動會更高端)進入界面,爬取列表中第一個音頻地址并存入相應文件夾中。這里有一個最簡單的爬蟲程序和一個最簡單的tkinter GUI編程。

注意,要先在網易云音樂網頁中將第一個對應音頻鏈接的位置定位:

python實現音樂播放和下載小程序功能

對于以上定位可通過如下方式獲得(定位器):

req = driver.find_element_by_id(’m-search’) a_id = req.find_element_by_xpath(’.//div[@class = 'item f-cb h-flag ']/div[2]//a’).get_attribute('href')

在XML語言中尋找鏈接路徑的方法可參見find_element_by_xpath創建目錄參見makedirs

這里的GUI需要tkinter添加文本。用text控件insert(插入文本)、see(滾動)、update(更新)等方法顯示正在下載和已下載圖樣;在get_music_name函數中,首先從輸入窗口獲取名稱,然后調用Edge驅動訪問網易云音樂主頁,通過’http://music.163.com/song/media/outer/url?id={}.mp3’.format(song_id)搜到歌曲,通過上述定位器找到歌曲地址和歌名。注意到第一個函數傳入的應該是字典類型(有了這種語句:song_id = item[’song_id’]),那就創建一個字典后在函數體內調用song_load實現下載。在這之前,驅動就完成了任務,所以可以關閉驅動。至于Tkinter的控件內容,應該根據實際情況試錯和設計,界面編程相對還是比較簡單的。(分別創建標簽控件、輸入框、列表框、按鈕,并依次確定它們在主界面中的位置)

from tkinter import *from selenium import webdriverglobal entryimport osfrom urllib.request import urlretrieve#2.下載歌曲def song_load(item): song_id = item[’song_id’] song_name = item[’song_name’] song_url = ’http://music.163.com/song/media/outer/url?id={}.mp3’.format(song_id) #創建文件夾 os.makedirs(’music_netease’,exist_ok=True) path = ’music_netease{}.mp3’.format(song_name) #顯示數據到文本框 text.insert(END,’歌曲:{},正在下載...’.format(song_name)) #文本框滾動 text.see(END) #更新 text.update() #下載 urlretrieve(song_url,path) #顯示數據到文本框 text.insert(END,’歌曲:{},下載完畢’.format(song_name)) #文本框滾動 text.see(END) #更新 text.update()#1.搜索def get_music_name(): #獲取輸入的內容 name = entry.get() url = ’https://music.163.com/#/search/m/?s={}&type=1’.format(name) #搜索頁面 option = webdriver.EdgeOptions() option.add_argument(’--headless’) #driver = webdriver.Edge(edge_options=option) driver = webdriver.Edge(’D:pythonmsedgedriver’) driver.get(url) driver.switch_to.frame(’g_iframe’) #獲取歌曲的id req = driver.find_element_by_id(’m-search’) a_id = req.find_element_by_xpath(’.//div[@class = 'item f-cb h-flag ']/div[2]//a’).get_attribute('href') song_id = a_id.split(’=’)[-1] print(song_id) song_name = req.find_element_by_xpath(’.//div[@class='item f-cb h-flag ']/div[2]//b’).get_attribute('title') print(song_name) #構造字典 item = {} item[’song_id’] = song_id item[’song_name’] = song_name driver.quit() #下載歌曲 song_load(item)#get_music_name()#形象工程# 搭建界面#創建畫板root = Tk()#標題root.title(’網易云下載器’)#設置窗口大小root.geometry(’560x450+400+200’)#標簽控件label = Label(root,text = ’輸入要下載的歌曲:’,font = (’華文行楷’,20))#標簽定位label.grid()#輸入框entry = Entry(root,font = (’楷書’,20))#定位entry.grid(row = 0,column = 1)#列表框text = Listbox(root,font = (’隸書’,16),width = 50, heigh = 15)text.grid(row = 1,columnspan = 2)#點擊按鈕button = Button(root,text = ’開始下載’,font = (’楷書’,15),command=get_music_name)button.grid(row=2, column=0,sticky=W)button1 = Button(root,text = ’退出程序’,font = (’楷書’,15),command=root.quit)button1.grid(row=2, column=1,sticky=E)#顯示當前的界面內容root.mainloop()

運行效果

python實現音樂播放和下載小程序功能

發現music_netease文件夾中相關文件赫然在列。

python實現音樂播放和下載小程序功能

簡易音樂播放器:這個控件在界面上仍然使用Tkinter,只不過沒有通過編程,而是利用pygame庫中的音頻模塊,在邏輯上增加了上一曲、下一曲(讀取上一個文件、下一個文件)、音量控制、簡單的線程控制等。

import osimport tkinterimport tkinter.filedialogimport timeimport threadingimport pygame#第一步 搭建界面root = tkinter.Tk()root.title(’音樂播放器’)#窗口大小和位置root.geometry(’460x600+500+100’)#不能拉伸root.resizable(False,False)folder = ’’#文件路徑res = []num = 0now_music = ’’#第二步 功能實現def buttonChooseClik(): ’’’添加文件函數’’’ global folder global res if not folder: folder = tkinter.filedialog.askdirectory()#選擇目錄 musics = [folder + ’’ + music for music in os.listdir(folder) if music.endswith((’.mp3’,’ogg’))] ret = [] for i in musics: ret.append(i.split(’’)[1:]) res.append(i.replace(’’,’/’)) var2 = tkinter.StringVar() var2.set(ret) #放入列表框 lb = tkinter.Listbox(root,listvariable =var2) lb.place(x=50,y=100,width=260,height=300) if not folder: return global playing playing = True # 根據情況禁用和啟用相應的按鈕 buttonPlay[’state’] = ’normal’ buttonStop[’state’] = ’normal’ pause_resume.set(’播放’)def play(): ’’’播放音樂的函數’’’ #初始化混音器設備 if len(res): pygame.mixer.init() global num while playing: if not pygame.mixer.music.get_busy(): #隨機播放一首歌曲 nextMusic =res[num] print(nextMusic) print(num) pygame.mixer.music.load(nextMusic.encode()) #播放一次 pygame.mixer.music.play(1) #print(len(res)-1) if len(res) -1==num: num=0 else: num = num+1 nextMusic = nextMusic.split(’’)[1:] musicName.set(’playing....’+’’.join(nextMusic)) else: time.sleep(0.1)def bottonPlayClik(): ’’’點擊播放’’’ buttonNext[’state’] = ’normal’ buttonPrev[’state’] = ’normal’ if pause_resume.get() == ’播放’: pause_resume.set(’暫停’) global folder if not folder: #選擇目錄,返回目錄名 folder = tkinter.filedialog.askdirectory() if not folder: return global playing playing = True #創建線程,主線程接受用戶操作 t = threading.Thread(target=play) t.start() elif pause_resume.get() == ’暫停’: pygame.mixer.music.pause() pause_resume.set(’繼續’) elif pause_resume.get() == ’繼續’: pygame.mixer.music.unpause() pause_resume.set(’暫?!?def bottonStopClik(): ’’’停止播放’’’ global playing playing = False pygame.mixer.music.stop()def bottonNextClik(): ’’’播放下一首’’’ global playing playing = False pygame.mixer.music.stop() global num if len(res)== num: num = 0 playing = True t = threading.Thread(target=play) t.start()def bottonPrevClik(): ’’’播放上一首’’’ global playing playing = True pygame.mixer.music.stop() global num if num == 0: num = len(res)-2 elif num == len(res) - 1: num -= 2 else: num -=2 print(num) playing = True t = threading.Thread(target = play) t.start()def closeWindow(): ’’’關閉窗口’’’ global playing playing = False time.sleep(0.3) try: pygame.mixer.music.stop() pygame.mixer.quit() except: pass root.destroy()def control_voice(value = 0.5): pygame.mixer.music.set_volume(float(value))#關閉窗口root.protocol(’WM_DELETE_WINDOW’,closeWindow)#添加按鈕buttonChoose = tkinter.Button(root,text=’添加’,command=buttonChooseClik)#布局buttonChoose.place(x=50,y=10,width=50,height=20)#播放按鈕 跟蹤變量值的變化pause_resume = tkinter.StringVar(root,value=’播放’)buttonPlay= tkinter.Button(root,textvariable=pause_resume,command=bottonPlayClik)buttonPlay.place(x=190,y=10,width=50,height=20)buttonPlay[’state’] = ’disabled’#停止播放buttonStop = tkinter.Button(root,text = ’停止’,command=bottonStopClik)#布局buttonStop.place(x=120,y=10,width=50,height=20)#狀態buttonStop[’state’] = ’disabled’# 下一首buttonNext = tkinter.Button(root,text=’下一首’,command =bottonNextClik)buttonNext.place(x=260,y=10,width=50,height=20)buttonNext[’state’] = ’disabled’#上一首buttonPrev = tkinter.Button(root,text=’上一首’,command =bottonPrevClik)buttonPrev.place(x = 330,y=10,width=50,height=20)buttonPrev[’state’] = ’disabled’musicName = tkinter.StringVar(root,value=’暫時沒有播放音樂’)labelName = tkinter.Label(root,textvariable=musicName)labelName.place(x=10,y=30,width=260,height=20)#添加控件s = tkinter.Scale(root,label=’音量’,from_=0,to=1,orient=tkinter.HORIZONTAL, length=240,showvalue=0,tickinterval=2,resolution=0.1,command=control_voice)s.place(x=50,y=50,width=200)#啟動消息循環root.mainloop()

運行效果:

python實現音樂播放和下載小程序功能

到此這篇關于python實現音樂播放和下載小程序功能的文章就介紹到這了,更多相關python--音樂播放和下載小程序內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
影音先锋在线一区| 久久99最新地址| 美国毛片一区二区三区| 久久日韩精品| 五月婷婷欧美视频| 亚洲欧美电影在线观看| 国产精品亲子伦对白| 91老师国产黑色丝袜在线| 精品99一区二区三区| av亚洲精华国产精华| 久久久噜噜噜久久人人看| 成人免费毛片片v| 日韩欧美123| 国产成人免费视频网站| 欧美一区二区视频观看视频| 国产剧情在线观看一区二区| 欧美一区二区福利在线| 国产成a人无v码亚洲福利| 精品久久久久一区二区国产| 99久久er热在这里只有精品15| 91精品国产综合久久久久久漫画 | 91啪亚洲精品| 国产视频一区二区在线| 99精品视频中文字幕| 国产女主播在线一区二区| 欧美一区二区福利在线| 国产精品一区二区免费不卡| 欧美一级久久久久久久大片| 成人涩涩免费视频| 久久精品欧美日韩精品| 极品尤物久久久av免费看| 亚洲人成网站精品片在线观看 | 91香蕉视频污在线| 欧美激情一二三区| 亚洲大片在线| 亚洲资源中文字幕| 欧美在线观看一二区| 国产中文字幕精品| 精品国产乱子伦一区| 国内精品久久久久久久影视麻豆| 亚洲人午夜精品天堂一二香蕉| 欧美亚洲一区| 久久精品国产99国产精品| 欧美一区二区三区成人| 欧美福利影院| 亚洲欧洲精品一区二区三区 | 成人免费福利片| 国产欧美日韩在线| 99riav1国产精品视频| 麻豆精品久久精品色综合| 日韩精品中午字幕| 黄色国产精品| 日韩电影一区二区三区四区| 日韩一区二区在线观看视频| 欧美一区二区视频在线| 亚洲最色的网站| 欧美午夜精品电影| 成人教育av在线| 一区二区中文视频| 性伦欧美刺激片在线观看| 韩国精品一区二区| 久久久午夜精品| 中文一区二区完整视频在线观看| 国产日韩亚洲| 国产在线视视频有精品| 亚洲国产高清不卡| 老司机午夜免费精品视频| 成人国产精品免费观看| 亚洲欧美在线视频| 欧美在线一区二区三区| 91欧美一区二区| 视频一区二区三区中文字幕| 日韩久久久精品| 亚洲在线免费| 成人aaaa免费全部观看| 亚洲一级不卡视频| 欧美电影免费观看高清完整版在线观看 | 日本不卡1234视频| 精品国产91亚洲一区二区三区婷婷| 91久久久一线二线三线品牌| 美国欧美日韩国产在线播放| 久久婷婷国产综合国色天香 | 色呦呦一区二区三区| 成人毛片视频在线观看| 一区二区三区在线观看欧美| 欧美精品久久99久久在免费线| 欧美成人日本| 免费精品视频在线| 国产精品色噜噜| 欧美三级日本三级少妇99| 欧美黄在线观看| 秋霞午夜av一区二区三区| 国产午夜精品在线观看| 欧洲亚洲国产日韩| 国产一区再线| 久久爱另类一区二区小说| 国产精品免费人成网站| 欧美综合欧美视频| 伊人天天综合| 粉嫩一区二区三区性色av| 亚洲一区二区三区小说| 精品国产凹凸成av人网站| 91国偷自产一区二区使用方法| 91看片淫黄大片一级在线观看| 日韩制服丝袜av| 国产精品久久三| 欧美日韩中文国产| 亚洲欧洲日韩综合二区| 成人一区二区视频| 丝瓜av网站精品一区二区| 中文子幕无线码一区tr| 欧美人动与zoxxxx乱| 99精品视频免费观看视频| 国产91精品久久久久久久网曝门| 亚洲成人福利片| 国产精品福利影院| 91麻豆精品国产91久久久资源速度 | 国产成a人亚洲精品| 香蕉久久夜色精品国产使用方法 | 亚洲精品欧洲精品| 国产不卡在线播放| 日本中文字幕一区| 亚洲精品成人悠悠色影视| 国产亚洲精品资源在线26u| 欧美高清视频不卡网| 久久精品中文| 亚洲国产欧美日韩| 色综合视频一区二区三区高清| 韩国一区二区三区| 天堂成人免费av电影一区| 中文字幕乱码久久午夜不卡 | 在线看国产日韩| 亚洲视频1区| 午夜日韩电影| 不卡的av电影| 国产黄色91视频| 久国产精品韩国三级视频| 亚洲国产色一区| 亚洲女同一区二区| 亚洲欧洲av另类| 欧美国产欧美综合| 亚洲精品在线观| 欧美一区二区三级| 欧美无乱码久久久免费午夜一区| 在线亚洲观看| 国产一区二区在线免费观看| 欧美bbbxxxxx| 欧美一区二区三区久久精品| 国产a久久麻豆| 国产精品一级在线| 国产综合色产在线精品| 美日韩一级片在线观看| 亚洲成人激情综合网| 亚洲永久精品大片| 亚洲精品视频观看| 亚洲一区二区四区蜜桃| 亚洲精品高清视频在线观看| 椎名由奈av一区二区三区| 亚洲欧洲精品一区二区三区不卡 | 精品国产一区二区亚洲人成毛片| 在线电影一区二区三区| 欧美日韩在线三级| 欧美三区免费完整视频在线观看| 欧美亚洲一区二区在线| 欧美视频在线不卡| 欧美日韩国产高清一区二区三区| 欧美日韩大陆在线| 欧美精品在线观看一区二区| 欧美电影一区二区| 日韩欧美国产一区二区三区| 欧美大片国产精品| 亚洲精品一区二区精华| wwww国产精品欧美| 国产天堂亚洲国产碰碰| 国产精品天干天干在观线| 日本一二三四高清不卡| 国产精品每日更新| 亚洲欧美福利一区二区| 中文字幕在线不卡视频| www.av亚洲| 亚洲第一福利一区| 欧美日韩久久不卡| 欧美一区二区三区在线观看| 91麻豆精品国产91久久久更新时间| 6080日韩午夜伦伦午夜伦| 7777精品伊人久久久大香线蕉超级流畅| 久久av最新网址| 日本韩国精品在线| 欧美巨大另类极品videosbest| 日韩视频一区二区三区在线播放| 精品人在线二区三区| 中文av一区特黄| 一区二区三区在线看| 视频一区视频二区在线观看| 理论片日本一区| 韩国三级在线一区| 国产欧美视频一区二区三区| 亚洲欧美日韩国产一区二区三区 | 狠狠色丁香婷婷综合| 国产成人午夜精品5599|