网易云音乐下载器-python小工具开发

网易云音乐下载器

代码在这

项目效果

通过网易云音乐的分享链接下载音乐mp3文件到本地。

要用到的库及全局变量

import re # 正则分析链接信息
import os # 文件操作
import time # 日志输出时间
import requests # 访问url爬取音乐文件
import tkinter as tk # GUI编写

PATH = os.getcwd() # 获取文件保存的路径

GUI编写

GUI布局编写,看个人喜好编排。

# GUI界面编写
root = tk.Tk()
root.title("网易云音乐下载器(试听歌曲无法下载)")

tk.Label(root, text="输入分享链接:").grid(row=0, column=0, padx=10, pady=10)
tk.Label(root, text="输入保存文件名\n(可以为空,通过链接解析):").grid(
    row=1, column=0, padx=10, pady=10)
tk.Label(root, text="状态:").grid(row=2, column=0, padx=10, pady=10)

Enter1 = tk.Entry(root, width=50)
Enter1.grid(row=0, column=1, padx=10, pady=10)

Enter2 = tk.Entry(root, width=50)
Enter2.grid(row=1, column=1, padx=10, pady=10)

tk.Button(root, text="下载", width=10, command=handleMsg).grid(
    row=0, column=2, padx=10, pady=5)

List1 = tk.Listbox(root, setgrid=True, height=1, width=50)
List1.grid(row=2, column=1)

root.mainloop()

效果如下:
image

爬取音乐的函数

这步比较简单,requests库爬取就可,headers可加可不加。

def getMusic(path, music_id, music_name):
    """
    爬取网易云音乐的函数
    param path: 文件保存的路径
    param music_id: 音乐id
    param music_name: 音乐名称
    return: None
    """
    url = f"http://music.163.com/song/media/outer/url?id={music_id}.mp3"
    res = requests.get(url)
    mp3 = res.content
    path += f'/{music_name}.mp3"
    with open(path, "wb") as file:
        file.write(mp3)

处理信息输入的函数

这步的效果是获取输入框中的信息,进行处理。

def handleMsg():
    """
    处理数据的函数
    param: None
    return: None
    """
    # 创建文件夹
    path = PATH + r"\download"
    try:
        os.mkdir(path)
    except:
        pass
    # 获取相关信息及输入窗口的恢复
    msg = Enter1.get()
    nAme = Enter2.get()

    Enter1.delete(0, tk.END)
    Enter2.delete(0, tk.END)
    List1.delete(tk.END)

    id = re.findall(r"id=[0-9]{3,15}", msg)
    name = re.findall('《(.*)》', msg)
    id = id[0][3:]
    name = nAme if nAme != '' else name[0] if name != [] else id
    # 爬取
    getMusic(path, int(id), name)

日志和报错处理

  1. 访问出错时(可能不用处理)
# getMusic函数

if res.status_code == 200:
    mp3 = res.content
    path += f'/{music_name}.mp3"
    with open(path, "wb") as file:
        file.write(mp3)
else:
    List1.insert(tk.END, f"访问出错,错误码:{res.status_code}")
    print(f"访问出错,错误码:{res.status_code}\n")
  1. 链接格式不对时
# handleMsg函数

if id == []:
    List1.insert(tk.END, "链接id解析出错,请检查格式!")
    print("链接id解析出错,请检查格式!\n")
else:
    id = id[0][3:]
    name = nAme if nAme != '' else name[0] if name != [] else id
    # 爬取
    getMusic(path, int(id), name)
    # 日志
    t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    logMsg = f"[{t}] id={id}, name={name}\n"
    with open(PATH + r"\log.txt", "a") as f:
        f.write(logMsg)
    List1.insert(tk.END, logMsg[:-1])
    print(logMsg)
posted @ 2023-02-08 09:51  络辰  阅读(128)  评论(0编辑  收藏  举报