某云音乐下载器

代码展示:

from urllib.request import urlretrieve
from tkinter import *
from selenium import webdriver
import os
import pygame
#selenium 是一套完整的web应用程序测试系统

#创建全局变量
item = {} #字典存储歌曲用
song_name='' #临时储存歌曲名字
song_name1=''
flag=0 #判断是播放还是下载音乐

#功能
#https://music.163.com/#/search/m/?s=%E4%B8%80%E7%9B%B4%E5%BE%88%E5%AE%89%E9%9D%99&type=1
#http://music.163.com/song/media/outer/url?id=5260494.mp3

#将歌曲名字另存,为播放音乐用
def get_item(item):
global song_name
song_name=item['song_name']
return song_name

#播放音乐
def play_music():
print("播放音乐")
global flag
global song_name1
if flag==1:
song_name1= get_item(item)

else:
song_name1=entry02.get()
str(song_name1)
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(r"D:编程用Python编程用pycharm编程用音乐下载器music{}.mp3".format(song_name1[0:40]))
pygame.mixer.music.play()
text.insert(END,'歌曲:{},正在播放...'.format(song_name1[0:40]))
#文本框滑动
text.see(END)

#暂停播放
def pause():
global song_name1
pygame.mixer.music.pause()
text.insert(END,'歌曲:{},已经暂停播放...'.format(song_name1[0:40]))
#文本框滑动
text.see(END)

#继续播放
def unpause():
global song_name1
pygame.mixer.music.unpause()
text.insert(END,'歌曲:{},继续播放...'.format(song_name1[0:40]))
#文本框滑动
text.see(END)

#下载歌曲(3)
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) #通过网易云外链链接下载歌曲
print(song_url)
#创建文件夹
os.makedirs('music',exist_ok=True) #创建储存用的文件夹
path = 'music{}.mp3'.format(song_name[0:40]) #设置存储路径
#显示下载进度
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()
return (song_name)



#歌曲id(2)
def get_music_name():
name = entry01.get() #获取输入框的内容
global flag
if len(name)==0:
flag=0
else:
flag=1
url = 'https://music.163.com/#/search/m/?s={}&type=1'.format(name)
print(url)
#隐藏浏览器
option = webdriver.ChromeOptions() #ChromeOptions 是一个配置 chrome 启动是属性的类
option.add_argument('--headless') #启用无头模式——使浏览器在后台运行
driver =webdriver.Chrome(options=option)
driver.get(url=url) #获取url
driver.switch_to.frame('g_iframe') #id name index
#歌曲id
req = driver.find_element_by_id('m-search') #通过id查找
a_id=req.find_element_by_xpath('.//div[@class="item f-cb h-flag "]/div[2]//a').get_attribute('href') #通过xpath查找歌曲的id
print(a_id)
song_id = a_id.split('=')[-1] #将id切片并取出来
print(song_id)

#获取歌曲名
song_name =req.find_element_by_xpath('.//div[@class="item f-cb h-flag "]/div[2]//b').get_attribute('title') #通过xpath查找歌曲的专有名
print(song_name)

#构建字典 id name
global item
item['song_id'] = song_id #将歌曲id传进字典item
item['song_name'] = song_name #将歌曲正式名字传进字典item里

driver.quit() #退出驱动
#下载歌曲
song_load(item)
get_item(item)





#界面(1)


#1.创建画布
root = Tk()
#2.添加标题
root.title('网易云音乐下载器')
#3.设置窗口大小
root.geometry('600x500+600+300')
#4.标签控件
label01 = Label(root,text='需下载歌曲名称:',font = ('华文行楷',20))
label02 = Label(root,text='播放歌曲:',font = ('华文行楷',20))
#5.定位
label01.grid(row=0)
label02.grid(row=1)

#6.输入框
entry01 = Entry(root,font = ('隶书',20))
entry02 = Entry(root,font = ('隶书',20))
#7.定位
entry01.grid(row = 0,column = 1)
entry02.grid(row=1,column=1)

#8.列表框
text = Listbox(root,font=('隶书',16),width=52,height=15)
#定位
text.grid(row=2,columnspan=3) #columnspan: 表示该组件需要横跨多少列

#按钮
#下载按钮
button = Button(root,text='开始下载',font=('隶书',15),command=get_music_name) #绑定事件——下载
button.grid(row=3,column=0)
#退出程序
button1 = Button(root,text='退出程序',font=('隶书',15),command=root.quit) #绑定事件——退出
button1.grid(row=3,column=2)
#播放音乐
button2 = Button(root,text='播放音乐',font=('隶书',15),command=play_music) #绑定事件——播放
button2.grid(row=4,column=0)
#暂停音乐
button3 = Button(root,text='暂停播放',font=('隶书',15),command=pause) #绑定事件——暂停
button3.grid(row=4,column=1)
#继续播放
button4 = Button(root,text='继续播放',font=('隶书',15),command=unpause) #绑定事件——暂停
button4.grid(row=4,column=2)

#显示界面
root.mainloop()



结果演示:

参考:

零基础学编程,Python爬虫与GUI制作音乐下载工具!

https://www.bilibili.com/video/BV1pz411i7yq

python3的urlretrieve()方法的作用与使用

https://blog.csdn.net/u012424313/article/details/82222188

通过网易云外链下载的方法:

https://www.cnblogs.com/MirageFox/p/7995929.html

打包成exe:

https://www.jb51.net/article/174549.htm

代码思路解析:

1.要做一个音乐下载器,所需要的是

(1)一个提供下载、退出按钮的界面

(2)功能:爬取某云音乐的下载链接地址

      播放音乐

2.因此需要的工具:

tkingter库———创建界面

from selenium import webdriver

urllib.request 里的urlretrieve——urlretrieve()方法直接将远程数据下载到本地

pygame——音乐播放

原文地址:https://www.cnblogs.com/modiqiang/p/13063365.html