当前位置: 首页 > news >正文

Python爬虫 - 网易云音乐下载

爬取网易云音乐实战,仅供学习,不可商用,出现问题,概不负责!

分为爬取网易云歌单和排行榜单两部分。

因为网页中,只能显示出歌单的前20首歌曲,所以仅支持下载前20首歌曲(非VIP音乐)

在这里插入图片描述

具体过程:

1.通过抓包,获取到请求头

在这里插入图片描述

headers = {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36","Cookie": "替换为自己的Cookie","Sec-Ch-Ua-Platform": "macOS","Sec-Fetch-Dest": "iframe","Sec-Fetch-Mode": "navigate","Sec-Fetch-Site": "same-origin","Upgrade-Insecure-Requests": "1"
}

2.发送请求,获取到网页源代码,通过Xpath进行解析,获取到歌曲名称,歌手名字,以及歌曲id

url = input("请输入要抓取的歌单链接:")
url = url.replace("/#", "")
res = requests.get(url, headers=headers)
res.encoding = 'utf-8'
res = res.text
html = etree.HTML(res)
title = html.xpath('//h2[@class="f-ff2 f-brk"]/text()')
songs = html.xpath('//ul[@class="f-hide"]/li/a/@href')
names = html.xpath('//ul[@class="f-hide"]/li/a/text()')

3.并分别对歌单创建单独的文件夹,进行歌曲存放

if len(title)!=0:path = './网易云歌单/' + title[0] + "/"
else:path = "./网易云歌单/未知歌单/"if not os.path.exists(path):os.makedirs(path)

4.判断是否为VIP歌曲,将VIP歌曲排除

for i in range(len(music_urls)):try:res = requests.get(music_urls[i], headers=headers).content.decode('utf-8')if res.find('很抱歉,你要查找的网页找不到') != -1:print(names[i] + ',VIP专属歌曲,无法下载')remove_url.append(music_urls[i])remove_name.append(names[i])continueexcept:pass
for item in remove_name:names.remove(item)
for url in remove_url:music_urls.remove(url)

5.下载歌曲

for i in range(len(music_urls)):try:print('正在下载..', names[i])res = requests.get(music_urls[i], headers=headers)with open(path + names[i] + ".mp3", "wb") as f:f.write(res.content)print('下载成功..', names[i])except Exception as e:if os.path.exists(path + names[i] + ".mp3"):os.remove(path + names[i] + ".mp3")print('下载失败,请联系管理员')

6.对于排行榜部分,和歌单逻辑基本相同

url = input("请输入榜单链接:")
url = url.replace("/#", "")
res = requests.get(url, headers=headers)
res.encoding = 'utf-8'
res = res.text
html = etree.HTML(res)
title = html.xpath('//h2[@class="f-ff2"]/text()')
songs = html.xpath('//ul[@class="f-hide"]/li/a/@href')
names = html.xpath('//ul[@class="f-hide"]/li/a/text()')
if len(title)!=0:path = './网易云歌单/' + title[0] + "/"
else:path = "./网易云歌单/未知歌单/"if not os.path.exists(path):os.makedirs(path)for item in songs:temp = str(item).replace("/song?id=", "")ids.append(temp)music_urls = []
for id in ids:music_urls.append(baseUrl + id + '.mp3')
downLoad(music_urls, names, path)

下载部分与下载歌单歌曲相同。

结果:

在这里插入图片描述

在这里插入图片描述

完整代码

联系邮箱:mango_1698@163.com

http://www.lryc.cn/news/283807.html

相关文章:

  • yarn包管理器在添加、更新、删除模块时,在项目中是如何体现的
  • React实现Intro效果(基础简单)
  • HBuilderx发布苹果的包需要注意什么
  • 烟火检测/周界入侵/视频智能识别AI智能分析网关V4如何配置ONVIF摄像机接入
  • C++ 内联函数
  • 微信小程序带参数分享界面、打开界面加载分享内容
  • 中小企业选择CRM系统有哪些注意事项?如何高效实施CRM
  • 轮胎侧偏刚度线性插值方法
  • 前端JS代码中Object类型数据的相关知识
  • vue基于Spring Boot共享单车租赁报修信息系统
  • CentOS 6.10 安装图解
  • Web自动化测试中的接口测试
  • 轻松识别Midjourney等AI生成图片,开源GenImage
  • ARP相关
  • uniapp打包配置 (安卓+ios)
  • 【算法优选】 动态规划之简单多状态dp问题——壹
  • Git学习笔记(第2章):Git安装
  • C生万物呀
  • 华纳云:怎么解决docker容器一直处于重启状态的问题?
  • react native android使用命令生成打包签名密钥
  • 245.【2023年华为OD机试真题(C卷)】内存冷热标记(JavaPythonC++JS实现)
  • Docker五部曲之五:通过Docker和GitHub Action搭建个人CICD项目
  • 「JavaSE」类和对象3
  • IntelliJ IDEA 中输出乱码解决
  • 序列到序列模型
  • 计算机网络(第六版)复习提纲4
  • 天拓分享:汽车零部件制造企业如何利用边缘计算网关和数网星平台实现数控机床数据采集分析
  • 爬虫逆向开发教程1-介绍,入门案例
  • 时序分解 | Matlab实现CEEMDAN+PE自适应噪声完备集合经验模态分解+排列熵计算
  • Oracle命令大全