Python爬取酷我音乐

🎈 博主:一只程序猿子

🎈 博客主页:一只程序猿子 博客主页

🎈 个人介绍:爱好(bushi)编程!

🎈 创作不易:喜欢的话麻烦您点个👍和

🎈 欢迎访问我的主页(点我直达)

🎈 除此之外您还可以通过个人名片联系我 👉👉👉👉👉👉

额滴名片儿

目录

1.介绍

2.步骤分析

(1)登录酷我音乐

(2)找到歌曲信息

(3)找到歌曲播放地址

3.代码实现

4.效果展示 


1.介绍

        本文将介绍Python爬虫如何实现爬取网页版酷我的榜单音乐并下载到本地!

2.步骤分析

(1)登录酷我音乐

        这一步的目的是获取cookie!

(2)找到歌曲信息

        找到榜单中歌曲的列表 ,获取歌曲的关键信息!

         这里我们只需要其中的三个值:

1.arltist: 歌手名

2.name: 歌曲名

3.rid: 歌曲id

歌手名和歌曲名用来给爬取到的.mp3文件命名,通过歌曲id获取歌曲的播放地址

(3)找到歌曲播放地址

        随便点击播放一首歌,就可以找到这个数据包!

        大致流程如下:

        由于CSDN的版权限制,有很多截图我都被迫删掉了,可能你暂时无法理解如何找到的请求地址和参数!但是在代码中你可以看到每个url的作用!

        现在我们已经找到了歌曲信息和歌曲的播放地址,就可以用python的requests构建请求了! 

3.代码实现

import timeimport requests# cookies,登录账号后很容易在请求头中找到自己的cookies
cookies = "换成你的"
# 构造请求头
headers = {'Accept': 'application/json, text/plain, */*','Accept-Language': 'zh-CN,zh;q=0.9','Connection': 'keep-alive',# 'Cookie': 'Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1702174705; _ga=GA1.2.1391285853.1702174705; _gid=GA1.2.1100462848.1702174705; uname3=%u6C34%u661F.; t3kwid=460193919; userid=460193919; websid=1549266808; pic3="http://img4.kuwo.cn/star/userhead/19/42/1553316725038_460193919.jpg"; t3=qq; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1702174821; _ga_ETPBRPM9ML=GS1.2.1702174705.1.1.1702174820.49.0.0; Hm_Iuvt_cdb524f42f0cer9b268e4v7y735ewrq2324=rb5taJN4jXjZc7tSBEQkHNDJ2aRmMNxj','Referer': 'https://kuwo.cn/rankList','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-origin','Secret': 'f1b6c63024e699d98cd436c1b1e8527a9ce1cdb90f538ef8f2698760e9071b0503035497','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36','sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Windows"',
}# 获取歌曲的播放地址
def get_play_url(song_id):# 请求时需要的参数params = {'mid': song_id,'type': 'music','httpsStatus': '1',# 'reqId': 'ff7eebd1-9706-11ee-bb7a-9939365fab80','plat': 'web_www','from': '',}# 设置最大尝试次数,因为有时候网络连接不稳定可能会请求不到数据,需要重试max_try = 3for i in range(max_try):try:response = requests.get('https://kuwo.cn/api/v1/www/music/playUrl',params=params, cookies=cookies, headers=headers)code = response.json()['code']breakexcept:code = -1time.sleep(1)if code == 200:play_url = response.json()['data']['url']else:play_url = ""return play_url# 获取歌曲的歌曲名,歌手名,歌曲id的信息
def get_song_info(page):# 请求时需要的参数params = {'bangId': '93','pn': page,'rn': '20','httpsStatus': '1',# 'reqId': 'e8516040-9702-11ee-bb7a-9939365fab80','plat': 'web_www','from': '',}response = requests.get('https://kuwo.cn/api/www/bang/bang/musicList',params=params, cookies=cookies, headers=headers)music_list = response.json()['data']['musicList']for music in music_list:singer = music['artist']song_name = music['name']song_id = music['rid']play_url = get_play_url(song_id)# print(singer, song_name, song_id, play_url)# 判断播放地址是否不为空if play_url:song_content = requests.get(url=play_url, headers=headers,cookies=cookies).content# 保存歌曲的二进制数据,以"歌曲名称-歌手名"的命名方式保存with open(f'data/{song_name}-{singer}.mp3', 'wb') as f:f.write(song_content)print(f'已下载------{song_name}\n')else:# 播放地址为空时输出以下内容print(f'{song_name} 为付费内容,请下载酷我音乐客户端后付费收听!\n')time. Sleep(1)

4.效果展示 

缺点: 有些歌需要vip账号才能获取到播放地址,建议用vip账号的cookies爬取! 

优点: 凡是可以下载的歌都是完整版的,和某狗的一分钟试听不同!

注意:本教程仅供学习交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/215081.shtml

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

相关文章

pytest + yaml 框架 -59.用例失败重跑机制pytest-rerunfailures

前言 有些接口可能不太稳定,第一次跑的时候由于网络原因或者其它原因失败,但是重新跑2次又成功了。 对于这种需要重新跑几次的场景,可以使用用例失败重跑机制,需安装pytest-rerunfailures 插件。 场景示例 失败重跑需要依赖 py…

【Axure原型分享】3D多柱状图_中继器版

今天和大家分享3D多柱状图_中继器版的原型模板,鼠标移入时,对应区域的背景会高亮变色,并且显示对应柱状体的数据。那这个原型是用Axure原生元件制作的,样式交互都可以自行修改,图表数据在中继器表格里填写,…

【二者区别】cuda和cudatoolkit

Pytorch 使用不同版本的 cuda 由于课题的原因,笔者主要通过 Pytorch 框架进行深度学习相关的学习和实验。在运行和学习网络上的 Pytorch 应用代码的过程中,不少项目会标注作者在运行和实验时所使用的 Pytorch 和 cuda 版本信息。由于 Pytorch 和 cuda 版…

mac安装elasticsearch8.x

es下载地址: Past Releases of Elastic Stack Software | Elastic https://www.elastic.co/cn/downloads/past-releases#elasticsearch 选择8.10版本 进入es bin目录下执行启动命令 ./elasticsearch 这个时候localhost:9200无法访问 原因是是因为开启了ssl认证…

R语言,table()函数实现统计每个元素出现的频数+并将最终统计频数结果转换成dataframe数据框形式

在 R中,要统计dataframe数据框中每个元素出现的频数,可以使用table()函数。以下是一个示例: 目录 一、创建数据 二、统计第一列每个元素出现的频数 三、统计第二列每个元素出现的频数 四、将频数结果转换为数据框,并改列名 一…

Cannot find cache named ‘‘ for Builder Redis

当引入 Redissson 时,springCache 缓存机制失效 原因:springCache 默认使用本地缓存 Redisson 使用redis 缓存 最后都转成redis了。。。 总感觉哪不对 两者居然不共存

nodejs+vue+微信小程序+python+PHP的外卖数据分析-计算机毕业设计推荐django

构建一种完全可实现、可操作的开放源代码信息收集系统,帮助记者完成工作任务。采编人员仅需输入所收集到的网址及题目即可迅速启动收集工作并进行信息归类。 2.根据新的数据收集要求,采用云计算技术实现新的收集器的迅速部署。对于资料采集点的改版&…

Java接入ChatGPT接口简单示例

我们定义了一个名为ChartGPTConfig的类,它有两个私有成员变量apiKey和apiUrl,分别表示ChartGPT的API密钥和API URL。 public class ChartGPTConfig {private final String apiKey;private final String apiUrl;public ChartGPTConfig(String apiKey, St…

angular hero学习

install nodehttps://nodejs.org C:\xxx\Downloads\node-v20.10.0-x64 C:\Program Files\nodejs\ C:\angular>node -v v20.10.0 C:\angular>npm -v 10.2.3 install angualr npm install -g angular/cli error # 设置淘宝源npm config set registry https://registry.…

基于Qt的登录页面设计

题目: 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和…

Node.js管理工具npm简单介绍

1.npm用途说明 我们在写node.js项目的时候npm工具是避免不的,那么我们如何使用该工具去管理包文具呢?首先我们先介绍npm工具的几种用途: 可以从npm服务器下载别人编写的第三方包到本地使用。可以从npm服务器下载并安装别人编写的命令行程序…

音乐制作工具 Ableton Live 12中文最新 for Mac

Ableton Live 12 Mac具有直观的界面和强大的功能,使得音乐制作变得更加简单和高效。它支持实时录制、编辑和混音,用户可以在创作过程中随时进行修改和调整。此外,该软件还提供了各种音频效果、虚拟乐器和采样器,使用户可以创建出更…

Springboot入门篇

一、概述 Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者Rod Johnson 。Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。 1.1对比 对比一下 Spring 程序和 SpringBoot 程序。如下图 坐标 Spring 程序中的…

深入理解模板引擎:解锁 Web 开发的新境界(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

TrustZone之完成器:外围设备和内存

到目前为止,在本指南中,我们集中讨论了处理器,但TrustZone远不止是一组处理器功能。要充分利用TrustZone功能,我们还需要系统其余部分的支持。以下是一个启用了TrustZone的系统示例: 本节探讨了该系统中的关键组件以及它们在TrustZone中的作用。 完成器:外围设备…

11、vue3(十一):sku管理:商品上下架,商品详情,删除sku

目录 一、sku查询页面完成 1.代码实现 (1)完成入参出参、接口代码 (2)首页页面

点评项目——秒杀优化

2023.12.11 上一张的秒杀券下单还可以进行优化,先来回顾一下下单流程: 可以看出流程设计多次查询和操作数据库的操作,并且执行顺序是一个线程串行执行,执行性能是比较低的。 优化方案:我们将判断秒杀库存和校验一人一单…

WPF里面的Dispatcher详解

在WPF应用程序中,Application.Current.Dispatcher是一个重要的属性。它允许开发者在WPF应用程序的主线程上执行操作,这对于确保UI响应性和避免假死(程序没有响应用户输入)非常关键。主线程负责接收输入、处理事件、绘制屏幕等任务。为了避免在主线程上执行耗时的操作,开发…

websocket和SSE通信示例(无需安装任何插件)

websocket和SSE通信示例(无需安装任何插件) 源码示例(两种方案任意切换) data(){return {heartBeatInterval:5000,// 心跳间隔时间,单位为毫秒webSocket:null,heartBeatTimer:null,} }, mounted() {// this.initWebS…

从零开始实现神经网络(三)_RNN循环神经网络

参考文章:rnn循环神经网络介绍 循环神经网络 (RNN) 是一种专门处理序列的神经网络。它们通常用于自然语言处理 (NLP) 任务,因为它们在处理文本方面很有效。在这篇文章中,我们将探讨什么是 RNN&a…