python网易云音乐下载_GUI图形化界面

效果展示

python网易云音乐下载_GUI图形化界面_第1张图片

1,打包exe文件,window直接可以运行
2,输入歌曲名字可以直接下载
3,下载后的歌曲保存在netease.exe文件所在的同一个文件夹中,music_netease文件夹是程序自动创建

python网易云音乐下载_GUI图形化界面_第2张图片

python网易云音乐下载_GUI图形化界面_第3张图片

直接上代码

from tkinter import *
from urllib.request import urlretrieve
from selenium import webdriver
import os


headers = {
    'Host': 'music.163.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36'
}

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)

    # 创建一个文件夹
    # exist_ok=True 如果文件存在不会报错 不会继续创建
    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()


# 搜索歌曲名字
def get_music_name():
    # 获取输入框输入的歌曲名字
    name = entry.get()
    # 拼接url
    url = 'https://music.163.com/#/search/m/?s={}&type=1'.format(name)
    print(url)
    # 搜索歌曲网页
    diver = webdriver.Chrome()
    diver.get(url=url)
    diver.switch_to.frame('g_iframe')

    # response = diver.find_element_by_xpath('./following-sibling::div//a/@href')
    # 获取歌曲id
    req = diver.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")
    print(a_id)
    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)

    # 构建字典 id name
    item = {}
    item['song_id'] = song_id
    item['song_name'] = song_name

    print(item)

    diver.quit()  # 退出浏览器
    # diver.close()  # 退出当前页面

    # 下载歌曲
    song_load(item)


# 搭建界面

# 创建界面
root = Tk()
# 添加标题
root.title('网易云音乐')
# 设置窗口大小 x 小写x连,不能用乘号 后面两位是x,y坐标,固定初始位置
root.geometry('560x450+400+200')

# 标签控件
label = Label(root, text='请输入下载的歌曲:', font=('华文行楷', 20))
# 标签定位 grid 网格式定位
label.grid()  # 默认 row=0,column=0
# 输入框
entry = Entry(root, font=('隶书', 20))
# 定位 第0行 第1列
entry.grid(row=0, column=1)
# 列表框
text = Listbox(root, font=('楷书', 16), width=50, heigh=15)
# 定位 columnspan 组件横跨的列数
text.grid(row=1, columnspan=2)

# 点击按钮
button = Button(root, text='开始下载', font=('隶书', 15), command=get_music_name)
# 定位 sticky 对齐方式 W E N S  东南西北
button.grid(row=2, column=0, sticky=W)

# command 点击触发方法
button1 = Button(root, text='退出程序', font=('隶书', 15), command=root.quit)
# 定位 sticky 对齐方式 W E N S  东南西北
button1.grid(row=2, column=1, sticky=E)

# 显示界面
root.mainloop()

程序运行环境

1,需要python3.0以上的python环境
2,需要python包模块
	from tkinter import *
	from urllib.request import urlretrieve
	from selenium import webdriver
	# selenium需要手动安装,前两个模块python3.0版本以上自动
3,安装chromedriver.exe浏览器驱动插件或者phantomjs(推荐使用chromdriver)
	(1)chromedriver.exe需要和浏览器对应的版本才能有效
	(2)推荐使用Chrome浏览器
	(3)将Chromedriver.exe复制到python解释器的scripts文件夹中,重启代码编辑器
	(4)运行下列代码检验chromdriver.exe是否安装成功
		from selenium import webdriver
		driver = webdriver.Chrome()
		driver.get('https://www.baidu.com')
		代码运行能够自动打开百度页面,表示插件chromedriver.exe安装成功
4,以上三步完成,可以运行代码下载歌曲,付费或者不付费的都可以下载,
	但是试听都需要版权的歌曲无法下载!

程序打包

1,安装pyinstaller
	pip install pyinstaller	(如果安装失败,用管理员权限安装)
	
2,打包程序
	(1)下载ico图片,保存到和代码同一文件夹
	(2)cd 到代码所在文件夹
	(3)打包 pyinstaller -F -w -i F:\code\image.ico demo.py
		-F 表示打包(F 大写)
		-w 取消控制台显示(w 小写)
		-i 有错误也继续执行(i 小写)
		ico图片路径(绝对路径)
		最后是代码名称
  • 打包其他详细教程请查看我的博客 “python_GUI教你撩妹,打包exe文件详解”

  • 打包程序命令
    python网易云音乐下载_GUI图形化界面_第4张图片

  • 打包完成效果
    python网易云音乐下载_GUI图形化界面_第5张图片

  • Windows可执行的exe文件在dist文件夹中
    python网易云音乐下载_GUI图形化界面_第6张图片

不足之处:1,目前只能下载一般品质的歌曲,2,代码中使用了chroemdriver.exe驱动检测插件,这种打包方式还没有完全脱离python环境,等后续改进代码,再发完全改进版

改进版(打包后exe文件,通过js解密获取歌曲ID替换掉插件,增加下载地址路径选择,以及歌曲选择):python网易云音乐下载,可选择歌曲,下载路径

你可能感兴趣的:(music)