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

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

相关文章

Sci Transl Med

今天给同学们分享一篇实验文章“Radiation-induced circulating myeloid-derived suppressor cells induce systemic lymphopenia after chemoradiotherapy in patients with glioblastoma”,这篇文章发表在Sci Transl Med期刊上,影响因子为17.1。 结果解…

2024 年 SEO 现状

搜索引擎优化(SEO)一直以来都是网络知名度和成功的基石。随着我们踏上 2024 年的征程,SEO领域正在经历重大变革,有些变革已经开始,这对企业、创作者和营销人员来说既是挑战也是机遇。 语音搜索 语音搜索曾是一个未来…

Docker入门指南:从基础到实践

在当今软件开发领域,Docker已经成为一种不可或缺的工具。通过将应用程序及其依赖项打包成轻量级的容器,Docker实现了开发、测试和部署的高度一致性。本文将深入研究Docker的基本概念,并通过详细的示例代码演示如何应用这些概念于实际场景中。…

Centos7云服务器上安装cobalt_strike_4.7。附cobalt_strike_4.7安装包

环境这里是阿里的一台Centos7系统。 开始安装之前首先要确保自己安装了java11及以上环境。 安装java11步骤: sudo yum update sudo yum install java-11-openjdk-devel把服务器端(CS工具分服务器端和客户端)的CS安装到服务器上后给目录下的…

安全开发:身份认证方案之 Google 身份验证器和基于时间的一次性密码 TOTP 算法

参考资料在文末注明,如本文有错漏欢迎评论区指出👏 目前很多应用都逐步采用了双因子认证或者说MFA认证方案,因此本文介绍一下背后的机制和TOTP算法原理。使用TOTP算法,只要满足两个条件:1)基于相同的密钥&…

微信小程序:模态框(弹窗)的实现

效果 wxml <!--新增&#xff08;点击按钮&#xff09;--> <image classimg src"{{add}}" bindtapadd_mode></image> <!-- 弹窗 --> <view class"modal" wx:if"{{showModal}}"><view class"modal-conten…

node.js express cors解决跨域

目录 什么是跨域 示例 postman请求 前端请求 cors中间件解决跨域 流程 配置cors参数 什么是跨域 跨域&#xff08;Cross-Origin&#xff09;是指在 Web 开发中&#xff0c;当一个网页的源&#xff08;Origin&#xff09;与另一个网页的源不同时&#xff0c;就发生了跨域…

记录 | Google gtest安装

1、下载源码 git clone https://github.com/google/googletest2、源码编译 cd googletestcmake CMaakeLists.txtmake -j32编译成功后会在 googletest/lib 下生成 libgtest.a、libgtest_main.a、libgmock.a、libgmock_main.a 四个静态库。 把生成的静态库和头加入到系统环境…

计算机网络——期末考试复习资料

什么是计算机网络 将地理位置不同的具有独立功能的多台计算机及其外部设备通过通信线路和通信设备连接起来&#xff1b;实现资源共享和数据传递的计算机的系统。 三种交换方式 报文交换&#xff1a;路由器转发报文&#xff1b; 电路交换&#xff1a;建立一对一电路 分组交换&a…

JavaScript-异常与this处理与性能优化

1. 深浅拷贝 const obj {uname: nidie,age: 18}// o对象直接复制obj&#xff0c;直接赋值将obj的地址也给了oconst o obj// 正常打印18console.log(o);// 对o改动&#xff0c;打印obj&#xff0c;obj也被改动了o.age 20console.log(o);console.log(obj);1.1 浅拷贝 拷贝对象…

深入理解RabbitMQ消息中间件

一、引语 本文将介绍RabbitMQ消息中间件的基本概念、工作原理以及在实际应用中的使用场景。通过阅读本文&#xff0c;您将了解到RabbitMQ如何帮助企业实现高效的异步通信和解耦。 二、消息中间件 1.简介 信息中间件是一种应用于分布式系统的基础软件&#xff0c;它位于各类…

Leetcode 40 组合总和 II

题意理解&#xff1a; 每个数字在每个组合中只能使用 一次 数字可以重复——>难点&#xff08;如何去重&#xff09; 每个组合和target 求组合&#xff0c;对合限制&#xff0c;考虑回溯的方法。——将其抽象为树结构。 树的宽度——分支大小 树的深度——最…