zoukankan      html  css  js  c++  java
  • 某云音乐下载器

    代码展示:

    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——音乐播放

  • 相关阅读:
    sublime text 安装json插件
    通过坐标系求覆盖物面积
    关于大数据入门的相关闲聊
    渡月橋 ~君 想ふ~
    数据库快照
    oracle 11g安装与使用
    IaaS、PaaS、SaaS介绍(非原创)
    Android项目模块化/组件化开发(非原创)
    开发人员必备的网络知识(非原创)
    公司常见管理系统介绍(非原创)
  • 原文地址:https://www.cnblogs.com/modiqiang/p/13063365.html
Copyright © 2011-2022 走看看