更多编程教程请到:菜鸟教程 https://www.piaodoo.com/

友情链接:

高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com/

(本篇部分代码综合整理自B站,B站有手把手说明的教程)

1.网易云非付费内容爬取器(声明:由于技术十分简单,未到触犯软件使用规则的程度)驱动Edge浏览器(自己写驱动会更高端)进入界面,爬取列表中第一个音频地址并存入相应文件夹中。这里有一个最简单的爬虫程序和一个最简单的tkinter GUI编程。

注意,要先在网易云音乐网页中将第一个对应音频链接的位置定位:

在这里插入图片描述

对于以上定位可通过如下方式获得(定位器):

 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 webdriver
global entry
import os
from 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:\python\msedgedriver’)

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()

运行效果

在这里插入图片描述

发现music_netease文件夹中相关文件赫然在列。

在这里插入图片描述

简易音乐播放器:
这个控件在界面上仍然使用Tkinter,只不过没有通过编程,而是利用pygame库中的音频模块,在逻辑上增加了上一曲、下一曲(读取上一个文件、下一个文件)、音量控制、简单的线程控制等。

import os
import tkinter
import tkinter.filedialog
import time
import threading
import pygame

#第一步 搭建界面
root = tkinter.Tk()
root.title(‘音乐播放器’)
#窗口大小和位置
root.geometry(‘460x600+500+100’)
#不能拉伸
root.resizable(False,False)

folder = ‘’#文件路径
res = []
num = 0
now_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--音乐播放和下载小程序内容请搜索菜鸟教程www.piaodoo.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持菜鸟教程www.piaodoo.com!

python实现音乐播放和下载小程序功能相关推荐

  1. 用python做一个数据查询软件_使用Python实现NBA球员数据查询小程序功能

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于早起Python ,作者投稿君 一.前言 有时将代码转成带有界面的程序,会极大地方便 ...

  2. python进行数据查询_使用Python实现NBA球员数据查询小程序功能

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于早起Python ,作者投稿君 一.前言 有时将代码转成带有界面的程序,会极大地方便 ...

  3. uniapp 仿网易云音乐播放器 微信小程序

    效果视频: uniapp 仿照网易云播放器功能 效果截图: 上代码: <template><view class=""><scroll-view :s ...

  4. 音乐播放器微信小程序开发-歌单界面(简陋版)

    仿QQ音乐app的歌单界面制作了一个简易且简陋的歌单界面. 首先po一张最终效果图(很多功能还没实现,以及还有bug没有改好) 因为不涉及到逻辑,目前只需一些网页开发经验与知识即可(当然啦,还需要一定 ...

  5. 音乐播放器微信小程序

    1.准备环境 2.1 开发工具 IDEA2019  微信开发者工具 PostMan SQLYog 2.2 开发环境 Java+mysql+JavaScript+json 2. 简介 前后端分离,在微信 ...

  6. 基于微信小程序java音乐播放器毕业设计论文/程序代码

    摘  要 5G时代已经慢慢的融入了我们的日常生活,随着国家的通信政策以及各大运营商的宣传的影响,5G手机已经随处可见,面对全球信息.技术空前高速发展,信息高速化发展更是社会进步的一个标志.在全球信息化 ...

  7. 计算机毕业设计Python+uniapp音乐播放微信小程序LW(小程序+源码+LW)

    计算机毕业设计Python+uniapp音乐播放微信小程序LW(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ py ...

  8. 许嵩音乐智能问答系统微信小程序之音乐播放器

    许嵩音乐智能问答系统微信小程序之音乐播放器 - 项目简介 项目简介. 音乐播放器搭建. 获取数据及文本分类. 智能客服聊天界面. 连接前端微信小程序输入和后端python,并返回值 连接知识图谱 你还 ...

  9. python可视化音乐播放器(pyqt5+多平台下载)

    1.主要功能 实现一个python可视化音乐播放器,用的是pyqt5,主要是三个平台获取,一个是网易云音乐,一个是酷我音乐,一个是酷狗音乐者三个平台获取音乐,能够进行下载,然后进行播放,具备网页获取的 ...

最新文章

  1. 初入职场的我怎么就成了个打杂的,我是这样破局的 No.146
  2. php id归零,帝国CMS怎样删除清空栏目和文章数据后新建的栏目和文章ID从1开始
  3. python二维数组怎么写_python的二维数组操作
  4. 5、leetcode剑指offer53 二分查找之0~n-1缺失的数字**
  5. java中junit_【Java】Junit快速入门
  6. AI也脸盲 |黑人遭人脸识别技术“误判”概率竟高出白人5至10倍!
  7. 第一个structs+spring+hibernate的web程序
  8. 俩虚拟机间通过ssh互相登陆
  9. happiness[国家集训队2011(吴确)]
  10. 如何把手变成手控_手把手教您如何在生产环境直接web级设计图形报表
  11. 常用 Windows10命令大全
  12. 为了有一些储蓄,把自己压榨到最狠的时候是怎样的?
  13. Winhex的使用教程
  14. 富士通Fujitsu DPK2089K 打印机驱动
  15. “保镖”无人机出没,让坏人无处遁形
  16. 男人副业做什么好?男生适合做啥副业?男士副业都有什么
  17. 日照华软游戏开发价格_棋牌游戏开发价格预算需要多少钱?
  18. 计算机视觉岗实习面经
  19. Spring、 Spring MVC、 Spring Boot的关系
  20. Hive 实战(2)--hive分区分桶实战

热门文章

  1. win7, gtx750ti 2g tensorflow 安装GPU版本,个人总结,步骤比较详细
  2. 彻底解决VS加载符号与查找PDB文件问题
  3. python量化app_量化一般用什么软件比较好,在哪里下载,还有一般量化的平台都有哪些呀?...
  4. SpringBoot + Vue打包部署到本地和远程服务器
  5. Java 23种设计模式通俗理解
  6. 【单片机学习笔记】(31):串口调试技巧、TFT触摸屏初识别、stm32F4与F1对比使用(全系列初始化概览)、YSF4的光耦隔离保护、外部中断与定时器消抖相结合的按键检
  7. python 最快 因式分解_python – 快速素因子分解模块
  8. linux安装tightvnc_CentOS Linux下安装VNC
  9. ROS导航小车3 odom里程计标定(仅作个人记录)
  10. 华为机试(4)字符串分割