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

实用软件1周前更新 小编
7 0

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

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

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

  1. pip install playwright -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. playwright install
复制代码

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

  1. from playwright.sync_api import sync_playwright
  2. with sync_playwright() as p:
  3.     browser = p.chromium.launch(headless=False)
  4.     context = browser.new_context()
  5.     page = context.new_page()
  6.      
  7.     # 打开网易云首页
  8.     page.goto("https://music.163.com")
  9.     page.get_by_role("link", name="登录").click()
  10.      
  11.     # 模拟点击"登录"
  12.     page.wait_for_timeout(1000)
  13.     print("请在浏览器中扫码登录...")
  14.      
  15.     # 等待手动扫码登录完成
  16.     input("登录成功后,回到这里按回车...")
  17.      
  18.     # 保存完整登录状态
  19.     context.storage_state(path="login.json")
  20.     print("登录状态已保存到 login.json")
  21.      
  22.     browser.close()
复制代码

2、main.py代码

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

代码文件下载地址:
GitHub开源地址:
效果演示:
【Python】网易云音乐下载脚本
【Python】网易云音乐下载脚本

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

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

下载地址

https://wwbcy.lanzouu.com/iVXly3wjt17c

https://github.com/yunlongzhuhuo/CloudMusic-Downloader/

© 版权声明

相关文章