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.hqwc.cn/news/413369.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

index_jsp报错

今天跟着视频一模一样敲代码,一直报500 搜索了好几篇csdn,不断地修改添加的jstl.jar 和standard.jar,修改这两个jar包版本,还是报500 又看到说是因为tomcat10中存在jsp.jar,同时存在发生冲突,于是把tomcat…

Windows系统字体尺寸学习

调用GetTextMetrics来获得字体尺寸信息, 函数返回设备描述表中当前选定的字体信息; 返回值到TEXTMETRIC类型的结构中; 返回字段值的单位取决于当前设备描述表映射方式;默认映射方式是MM_TEXT,值的单位是像素; 前7个字…

arcgis javascript api4.x以basetilelayer方式加载arcgis发布的栅格切片服务

需求: 以arcgis js api的basetilelayer加载arcgis发布的栅格切片服务 效果图: 其中和tileinfo和lods,这样获取: https://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer/?fpjson urltemplate: …

图像传感器市场分析:预计2029年将达到204亿美元

目前图像传感器已广泛应用于智能手机、功能手机、平板电脑、笔记 本电脑、汽车电子、移动支付、医疗影像等应用领域,成为移动互联网和物联网应 用的核心传感器件。目前,全球主要 CMOS 图像传感器供应商包括三星、索尼、豪威科技、格科微等。图像传感器具…

阿里云服务器怎么样?阿里云服务器优势、价格及常见问题

阿里云服务器ECS英文全程Elastic Compute Service,云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,阿里云提供多种云服务器ECS实例规格,如ECS经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等,阿里云服务器网al…

93.乐理基础-记号篇-装饰音记号(一)级进、跳进、经过音、辅助音

内容参考于:三分钟音乐社 上一个内容:92.乐理基础-记号篇-演奏记号(三)刮奏、琶音-CSDN博客 首先 级进 与 跳进 1.级进指的是忽略掉所有升降号,如果两个音之间不存在其它的唱名,那前一个音到后一个音就成…

Linux的权限(2)

目录 Linux的(事物属性)文件权限 文件权限值得表示方法 字符表示方法 8进制表示方法 文件访问权限得相关设置方法 chmod修改权限法1 chmod修改权限法2 文件的角色(拥有者/所属者)修改 chown拥有者 chgrp所属者 &…

Qt应用开发(安卓篇)——Linux下Qt15.5.2配置Android

目录 一、前言 二、Qt安装 三:JDK安装 四:安装SDK,NDK 五、其他事项 六、新建项目 一、前言 看网上教程,多数是windows环境下的,配置也很简单,想不到自己配置的时候却遇到很多问题,传了一…

在vite5和vue3开发环境中使用jodit4富文本编辑器,并添加自定义插件和使用highlight.js实现代码块高亮(附其他自定义配置项和全部代码)

最近富文本编辑器jodit终于更新发布到了4.0版本,加入了css变量、有更好的typescript支持,截止发文时的版本是:4.0.5,看到有了新版本于是便想着将本地项目中的jodit版本也进行升级,琢磨着再丰富和添加一些功能&#xff…

vue3.2二次封装antd vue 中的Table组件,原有参数属性不变

vue3.2中的<script setup>语法 在项目中多处使用到表格组件,所以进行了一个基础的封装,主要是通过antd vue 中表格的slots配置项,通过配合插槽来进行封装自定义表格; 这次主要的一个功能是编辑之后变成input框 修改了之后变成完成发送请求重新渲染表格&#xff1a; 子…

喜报!博睿数据荣获数据猿“年度创新服务企业奖、年度创新服务产品奖”!

1月17日&#xff0c;由数据猿与上海大数据联盟联合主办的“大数据产业发展论坛”活动在上海隆重举办。其中&#xff0c;备受关注的《2023中国大数据产业年度榜单》正式揭晓。在众多优秀的企业中&#xff0c;博睿数据凭借其前瞻性的产品技术布局、强大的市场影响力以及卓越的智能…

聚道云如何助力企业破解审批困境,开启高效工作?

客户介绍&#xff1a; 某科技股份有限公司是中国领先的创新创业服务平台&#xff0c;致力于为企业家、创业者提供全方位的创业服务&#xff0c;助力他们实现创业梦想。公司拥有一支专业的团队&#xff0c;通过提供一系列的创业培训、资源对接、媒体宣传等服务&#xff0c;帮助…