【Python】网易云音乐下载脚本

共计 2225 个字符,预计需要花费 6 分钟才能阅读完成。

高考完一直想写点程序,但发现自己初中学的 Python 都忘光了,于是又重新学了一下。
有一天用以前看到的方法下载网易云上面的音乐的时候,突发奇想,想写一个自动化脚本,这样就可以全自动下载音乐了 {:301_997:}
详细的下载方法网上能够找到 https://www.bilibili.com/video/BV1Te4y1F7br/,这里就不再赘述了,想理解原理的朋友可以看一下。

这个自动化脚本主要是基于 playwright 库编写的,通过模拟浏览器操作来下载,可以做到能试听的音乐就可以下载。
大体过程可以分为三步:
1、向用户发送登录请求,用户扫码登录网易云音乐后保存登录信息,下一次使用可以直接加载。
2、进入歌曲详情页时,模拟点击播放按钮
3、拦截传输的 m4a 文件并下载

使用指南:
1、先安装 playwright 库及其依赖的浏览器内核,可通过如下命令安装:

pip install playwright -i https://pypi.tuna.tsinghua.edu.cn/simple
playwright install

2、新建一个文件夹,将 first.py 和 main.py 两个文件放在里面,先运行 first.py,并按照页面上的指示进行扫码登陆(如果有些卡顿的话可以退出重进一下)
3、运行 main.py,将想要下载的音乐的详情页地址复制下来,粘贴到程序中,按回车就可以自动下载了。
下面直接上代码:
1、first.py 文件代码:

from playwright.sync_api import sync_playwright
 
with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
     
    # 打开网易云首页
    page.goto("https://music.163.com")
    page.get_by_role("link", name="登录").click()
     
    # 模拟点击 "登录"
    page.wait_for_timeout(1000)
    print("请在浏览器中扫码登录...")
     
    # 等待手动扫码登录完成
    input("登录成功后,回到这里按回车...")
     
    # 保存完整登录状态
    context.storage_state(path="login.json")
    print("登录状态已保存到 login.json")
     
    browser.close()

2、main.py 代码

import re
from playwright.sync_api import Playwright, sync_playwright
from urllib.request import urlretrieve
 
url_list = []
name_list = []
 
# 通过响应代码找出下载链接
def add_list(response):
    if response.status == 206 :
        url_list.append(response.url)
# 下载函数
def download(playwright: Playwright,url1):
    browser = playwright.chromium.launch()
    context = browser.new_context(storage_state="login.json")   # 加载登录信息
    page = context.new_page()
    page.on("response", add_list)
    page.goto(url1)
    # 模拟点击播放按钮
    page.locator("iframe[name="contentFrame"]").content_frame.get_by_role("link", name="播放", exact=True).click()
    page.wait_for_timeout(1000) # 等待页面加载,可适当延长或缩短
    name_list.append(page.title())
    save_path = name_list[0] + ".m4a"
    urlretrieve(url_list[0], save_path)     # 下载音乐
    print("%s 下载完成" % save_path)
    # 清空重置列表
    name_list.clear()
    url_list.clear()
    context.close()
 
with sync_playwright() as playwright:
    urls = input("请输入下载链接(多个链接可用空格隔开):").split()
    for each in urls:
        download(playwright,each)
    print("音频文件均保存在代码文件所在文件夹中")

代码文件下载地址:https://wwbcy.lanzouu.com/iVXly3wjt17c
GitHub 开源地址:https://github.com/yunlongzhuhuo/CloudMusic-Downloader/

效果演示:
【Python】网易云音乐下载脚本

【Python】网易云音乐下载脚本
最后再说说编写代码过程中的心得吧
我发现现在 AI 真的是特别强大,“将登陆状态保存”这个思路就是 AI 启发我的,并且帮我写了 first.py 文件的一部分代码。
另外,在编写自动化测试脚本的过程中,可以直接调用 playwright 中的 codegen 功能,直接根据操作生成代码,大大提升代码编写效率。

最后希望大家多多评分和发表跟帖,谢谢大家!

正文完
 0
suyan
版权声明:本站原创文章,由 suyan 于2026-07-16发表,共计2225字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件QQ邮箱:suyanw520@163.com 与我们联系处理。敬请谅解!
评论(没有评论)
验证码