python实现音乐播放和下载小程序功能

(本篇部分代码综合整理自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--音乐播放和下载小程序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于腾讯云服务器部署微信小程序后台服务(Python+Django)

    一 前言 微信小程序,相信大家早已熟知,它是一种无需下载安装即可使用的轻型应用,具有跨平台和接近 Native App 性能体验的优势.从开发模式上说,它是前后端分离的,微信小程序负责实现前端应用,后端服务可以使用任何你说熟知的开发语言,如 PHP . NodeJs . Java . C# . Python 等,因而,微信小程序的开发文档主要是围绕 WXML . WXSS 等前端框架.组件或样式布局进行讲解,几乎看不到后端技术的身影.本文主要介绍如何在腾讯云服务器上部署 Python+Djang

  • Python简单基础小程序的实例代码

    1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i,'=',i*j,end = ' ',sep='') # end默认在结尾输出换行,将它改成空格 sep 默认 j,'*',i,'=',i*j 各元素输出中间会有空格 print()#这里作用是输出换行符 i = 1 while i <= 9: j = 1 while j <= i: print(&

  • python获取微信小程序手机号并绑定遇到的坑

    最近在做小程序开发,在其中也遇到了很多的坑,获取小程序的手机号并绑定就遇到了一个很傻的坑. 流程介绍 官方流程图 小程序使用方法 需要将 <button> 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号. <button open-type="getPhoneN

  • python开发简易版在线音乐播放器

    在线音乐播放器,使用python的Tkinter库做了一个界面,感觉这个库使用起来还是挺方便的,音乐的数据来自网易云音乐的一个接口,通过urllib.urlopen模块打开网址,使用Json模块进行数据的解析,最后使用mp3play库对音乐进行在线播放,也可以同时下载mp3,开发环境:python2.7 , 附上源代码如下: # _*_ coding:utf-8 _*_ from Tkinter import * import tkMessageBox import urllib import

  • Python实现在线音乐播放器

    最近这几天,学习了一下python,对于爬虫比较感兴趣,就做了一个简单的爬虫项目,使用Python的库Tkinsert做了一个界面,感觉这个库使用起来还是挺方便的,音乐的数据来自网易云音乐的一个接口,通过requests模块,get请求将数据获得,使用Json模块进行数据的解析,最终使用python的mp3play库进行对音乐的在线播放,以下是该程序的源码. #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2016-12-28 21

  • python使用Tkinter实现在线音乐播放器

    本文实例使用Tkinter实现在线音乐播放器的具体代码,供大家参考,具体内容如下 1.先使用Tkinter库写界面 2.写点击按钮触发的事件 (1).使用网易音乐的api,返回数据包装成json格式数据,解析数据 (2)涉及到多线程的问题未解决,一个软件默认打开一个线程,当播放歌曲时,显示界面就会卡掉,导致python停止工作 代码: #coding=utf-8 from Tkinter import * import tkMessageBox import urllib import json

  • 一个可以套路别人的python小程序实例代码

    先简要介绍一下程序. 程序是使用pycharm工具,python语言所写.程序包括客户端 client.py 和服务器端 server.py 两部分,利用了python中的socket包. 咳咳,使用方法来了! 首先,你需要你和你的朋友在同一个局域网内,然后在你的主机上,运行服务器端 server.py. 然后,让你的朋友在他的电脑上运行客户端 client.py. 此时你朋友电脑的windows用户密码,就会变成一个随机密码,且这个生成的随机密码他本人无法得知,而是把这个密码通过socket传

  • python3音乐播放器简单实现代码

    本文实例为大家分享了python3音乐播放器的关键代码,供大家参考,具体内容如下 from tkinter import * from traceback import * from win32com.client import Dispatch import time,eyed3,threading name = [] def openfile(index = [1]): global total,name filenames = filedialog.askopenfilenames(tit

  • python实现音乐播放和下载小程序功能

    (本篇部分代码综合整理自B站,B站有手把手说明的教程) 1.网易云非付费内容爬取器(声明:由于技术十分简单,未到触犯软件使用规则的程度)驱动Edge浏览器(自己写驱动会更高端)进入界面,爬取列表中第一个音频地址并存入相应文件夹中.这里有一个最简单的爬虫程序和一个最简单的tkinter GUI编程. 注意,要先在网易云音乐网页中将第一个对应音频链接的位置定位: 对于以上定位可通过如下方式获得(定位器): req = driver.find_element_by_id('m-search') a_i

  • 使用Python实现NBA球员数据查询小程序功能

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于早起Python ,作者投稿君 一.前言 有时将代码转成带有界面的程序,会极大地方便使用,虽然在网上有很多现成的GUI系统,但是套用别人的代码,心里难免有些尴尬,所以本文将用Python爬虫结合wxpython模块构造一个NBA爬虫小软件 本文框架构造将分为二个部分讲解: 构建GUI界面举例套用爬虫框架 主要涉及的Python模块有 requests wx pymysql pand

  • 使用Python的音乐播放器GUI的实现

    音乐播放器可让您快速轻松地管理和收听所有音乐文件.在本文中,我将带您了解如何使用 Python 创建音乐播放器 GUI. 如何使用 Python 创建音乐播放器 GUI? 第一步是选择一个 Python GUI 框架,这里我将使用两个主要的 GUI 库来使用 Python 创建音乐播放器: Pygame Tkinter Pygame 是一个用于创建视频游戏的 Python 库.要使用 Python 创建音乐播放器,我们将使用 Pygame 声音组件. Tkinter 是一个用于创建 GUI 应用

  • 基于Python制作B站视频下载小工具

    目录 1. 原理简介 2. 网页分析 3. 视频爬取 4. 存入本地 5. GUI工具制作 1. 原理简介 原理很简单,就是获取视频资源的源地址,然后爬取视频的二进制内容,再写入到本地即可. 2. 网页分析 打开该网页,然后F12进入开发者模式,接着点开网络—>全部,因为视频资源一般比较大,我这里根据大小进行了从大到小的排序,找到了第一条这些可能和视频源地址有关. 然后,我们复制找到的这条里的url部分不变的部分,回到元素中ctrl+F搜索,找到了可能和视频源地址有关的节点. 果然,我们复制这部

  • 基于Python实现音乐播放器的实现示例代码

    目录 一.环境设置 二.播放功能 三.停止功能 四.暂停与恢复 五.关闭 六.完整代码 七.改进 一.环境设置 第一步引入必须的各类包 import os import tkinter import tkinter.filedialog import random import time import threading import pygame 特别是pygame需要手动安装 pip install pygame 二.播放功能 首先选择音乐目录,然后创建播放现成,播放音乐. # 播放按钮 d

  • Python实现注册、登录小程序功能

    主要实现功能 1.用户输入用户名,在用户名文件中查找对应的用户,若无对应用户名则打印输入错误 2.用户名输入正确后,进行密码匹配.输入密码正确则登录成功,否则重新输入. 3.连续输错三次密码则该用户名被锁,退出程序 -------------------------------------------------- 在程序文件夹下建立一个用户名.密码的文件 :user_np.txt和一个用于存放被锁用户名的文件:lock.txt ---------------------------------

  • python实现扫描ip地址的小程序

    python实现扫描ip地址的小程序,具体代码如下所示: import os,time import sys start_Time=int(time.time()) ip_True = open('ip_True.txt','w+') ip_False = open('ip_False.txt','w+') IPhost = [] IPbegin = (input(u'请输入起始查询IP: ')) IPend = input(u'请输入终止查询IP: ') IP1 = IPbegin.split

  • python实现音乐播放器 python实现花框音乐盒子

    本文实例为大家分享了python实现音乐播放器的具体代码,供大家参考,具体内容如下 """这是一个用海龟画图模块和pygame的混音模块制作的简易播放器. 作者:李兴球,日期:2018/8/26""" from turtle import * def init_screen(): """初始化屏幕""" screen = Screen() screen.setup(width,heigh

  • 基于python tkinter的点名小程序功能的实例代码

    代码如下所示: import datetime import json import os import random import tkinter as tk import openpyxl # 花名册文件名 excel_file_path = "花名册.xlsx"#需在当前目录创建对应花名册.xlsx # 工作表名 excel_sheet = "Sheet1" # 记录存储文件名 file_path = "name_record.json"

  • 使用DeviceOne实现微信小程序功能

    微信小程序即将推出,还没推出就火的不行了.基于微信这个巨大平台,小程序必然能有巨大成功.不过它并不能完全取代App,该开发App还得开发.如果我们自己想实现一个基于自己的APP包含类似微信的小程序功能,该如何实现了?我们先来看看小程序的技术特点. 小程序的特点 1. 跨平台,微信就像JRE,在不同操作系统上都有实现,所以微信上的小程序就像运行在JRE上的java程序,从而实现跨平台.另外解决了多平台多机型的适配问题. 2. 体验好,webview加载html是最容易的跨平台方式,但是在手机上的体

随机推荐