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.mzph.cn/news/632326.shtml

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

相关文章

SpringCloud GateWay 在全局过滤器中注入OpenFeign网关后无法启动

目录 一、问题 二、原因 1、修改配置 2、添加Lazy注解在client上面 3、启动成功 一、问题 当在gateway的全局过滤器GlobalFilter中注入OpenFeign接口的时候会一直卡在路由中,但是不会进一步,导致启动未成功也未报错失败 2024-01-18 22:06:59.299 I…

开发板通过 Ubuntu/Linux 连接外网

文章目录 开发板通过 Ubuntu/Linux 连接外网概述配置 Ubuntu 系统配置开发板 开发板通过 Ubuntu/Linux 连接外网 概述 如果开发板需要访问外网,可以通过网线将开发板与 Ubuntu 系统连接起来,在 Ubuntu 系统中配置 ip_forward 让 Ubuntu 成为路由器&…

数字创意市场:Web3时代创作者的新机遇

随着Web3时代的崭露头角,数字创意市场正迎来全新的变革和机遇。在这个数字化的时代,创作者们将面对更加开放、去中心化的创作和交易环境。本文将深入探讨Web3时代数字创意市场为创作者带来的新机遇,以及这个时代为创意产业带来的变革。 创作者…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-4 label

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>label</title> </head><body> 性别: <label for"male">男</label> <input type"radio" name"sex&quo…

滚动菜单ListView

activity_main.xml <include layout"layout/title"/> 引用上章自定义标题栏 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app&qu…

配置云服务器

需求 我打算配置一个小型云服务器&#xff0c;玩玩。学习怎么部署网站等等。 1、购买云服务器 第一次玩&#xff0c;我购买的华为云提供的云服务器 66元 安装ubuntu 22 2、配置环境 jdk 解压jdk命令 tar -xzf jdk-8u171-linux-x64.tar.gz 修改配置文件 vim /etc/profil…

如何安装“虚拟机(VMware)”win10系统?

1、 下载 vmware官网下载&#xff1a;vmware官网跳转 2、 安装

HarmonyOS NEXT鸿蒙星河版发布

1月18日,在深圳举行的“鸿蒙生态千帆启航仪式”上,华为常务董事、终端BG CEO余承东宣布HarmonyOS NEXT鸿蒙星河版面向开发者开放申请。鸿蒙星河版将实现原生精致、原生易用、原生流畅、原生安全、原生智能、原生互联6大极致原生体验。 并且,华为在 1 月 15 日开启了HarmonyO…

SpringBoot SaToken Filter如用使用ControllerAdvice统一异常拦截

其实所有的Filter都是一样的原理 大致流程: 创建一个自定义Filter, 用于拦截所有异常此Filter正常进行后续Filter调用当调用后续Filter时, 如果发生异常, 则委托给HandlerExceptionResolver进行后续处理即可 以sa-token的SaServletFilter为例 首先注册SaToken的过滤器 pac…

安卓apk加固后重签名

背景 等保检测&#xff0c;安卓apk使用第三方加固后签名信息会丢失&#xff0c;需要我们重新进行签名 使用jarsigner签名遇到的问题 APP失效无法安装 如何解决签名失效 我们在这里使用Android SDK的apksigner进行签名 mac系统&#xff0c;apksigner 需要设置环境变量 1、…

基于深度学习的时间序列算法总结

1.概述 深度学习方法是一种利用神经网络模型进行高级模式识别和自动特征提取的机器学习方法&#xff0c;近年来在时序预测领域取得了很好的成果。常用的深度学习模型包括循环神经网络&#xff08;RNN&#xff09;、长短时记忆网络&#xff08;LSTM&#xff09;、门控循环单元&a…

安全牧场,保障优质奶源 追溯羊奶品质

安全牧场&#xff0c;保障优质奶源 追溯羊奶品质 近年来&#xff0c;人们对食品安全和健康越来越关注&#xff0c;而安全牧场的兴起正能够满足人们对优质奶源的需求。安全牧场以严格的品质监控和科学的管理&#xff0c;为消费者提供可追溯的高品质羊奶产品。本文小编羊大师将为…

动态住宅代理IP是什么?如何配置使用?

动态住宅代理IP&#xff0c;作为一种高效的网络工具&#xff0c;不仅能够为您的在线活动提供额外的保护层&#xff0c;还能增强匿名性和数据安全。接下来将深入探讨动态住宅代理IP的定义、设置步骤、以及它如何有效保护您的网络隐私和安全。 一、动态住宅代理是什么&#xff1f…

springboot mybatis-plus swing实现报警监听

通过声音控制报警器&#xff0c;实现声光报警&#xff0c;使用beautyeye_lnf.jar美化界面如下 EnableTransactionManagement(proxyTargetClass true) SpringBootApplication EnableScheduling public class AlarmWarnApplication {public static void main(String[] args) …

如用postman进行web端自动化测试(超详细解析)

前言 概括说一下&#xff0c;web接口自动化测试就是模拟人的操作来进行功能自动化&#xff0c;主要用来跑通业务流程。 主要有两种请求方式&#xff1a;post和get&#xff0c;get请求一般用来查看网页信息&#xff1b;post请求一般用来更改请求参数&#xff0c;查看结果是否正…

嵌入式学习-网络编程-Day5

思维导图 select完成tcp并发服务器模型&#xff1a; 服务器端 #include <myhead.h> #define SER_PORT 8888 #define SER_IP "192.168.122.153"int main(int argc, const char *argv[]) {//1.创建套接字int sfd socket(AF_INET,SOCK_STREAM,0/*IPPROTO_TCP*…

前端公共组件库优化

背景 前段时间入职了新公司后&#xff0c;做一些内部前端基建的工作&#xff0c;其中一个工作就是优化现有的frontend-common公共组件库。之前的组件库一直是以源码依赖的形式存在&#xff0c;即各个项目通过git submodule的方式将该仓库引入到各个项目中&#xff0c;作为一个…

机器学习--jupyter使用

机器学习–jupyter notebook的使用 Jupyter项目是一个非盈利的开源项目&#xff0c;源于2014年的ipython项目&#xff0c;因为它逐渐发展为支持跨所有编程语言的交互式数据科学和科学计算 Jupyter Notebook&#xff0c;原名IPython Notbook&#xff0c;是IPython的加强网页版…

学习vue3(一)

参考&#xff1a;Vue3TS 快速上手 1.Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuej…

安卓app签名生成工具

基本信息 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html 使用方法:下载模拟器,随后将打包的apk,拉到模拟器中,然后点击上面,的文档,拉到最底下,下载那个软件到模拟器,,随后将打包的包名,输入就可以生成签名…