Python实战项目2——自动获取酷狗音乐工具

news/2023/5/28 8:08:08

在这里插入图片描述

🤵‍♂️ 个人主页@老虎也淘气 个人主页
✍🏻作者简介:Python学习者
🐋 希望大家多多支持我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注

今天分享pyhton第二个实战项目——自动获取酷狗音乐

准备

win11
pycharm
Edge浏览器

有了第一个自动获取小说工具项目的经历,今天这个会容易许多。不清楚第一个项目的可以这里去阅读Python实战项目1——自动获取小说工具

开始

首先打开浏览器,搜素酷狗音乐。
在这里插入图片描述
接下来我们搜索一首歌,以一首《大鱼》为例,大家根据需求,喜欢什么直接搜索即可。
在这里插入图片描述

此时相关的音乐列表全部出现,但是现在并没有音乐。接下来点击播放按钮
在这里插入图片描述
此时这个页面就是我们要爬取的页面,找出URL即可。
右键检查——网络
在这里插入图片描述
进入这个界面,这个什么意思呢,它表示的是,当我们访问这个页面需要加载的资源。点击此处清空一下,然后刷新,重新加载页面资源。
在这里插入图片描述
快速定位音乐位置我们直接点击媒体。正如箭头2所指:就是当前页面我们播放的音乐了。
在这里插入图片描述
在这里插入图片描述
这就是我们要找的URL地址了。选中它复制,然后打开新的浏览器标签,粘贴,回车。出现以下页面说明我们成功找到。
在这里插入图片描述
下面开始在pycharm中编写准备代码。必不可少我们依旧需要伪装自己,不会伪装的去看上一篇文章,这里不做介绍。

# pip install requests 
import requests # 发送请求的用的模块
import json
# 音乐的url地址
info_url ='https://webfs.ali.kugou.com/202301191042/ca350e32a861fbe454257eefafab9989/part/0/960111/KGTX/CLTX001/clip_bfbdd3df47727b701d4480ea36a8f73b.mp3'
# 伪装自己
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}
# 发送请求到服务器,获取音乐资源
m_resp = requests.get(m_url,headers=headers)
# 服务器回应的数据--保存数据
with open('zzz.mp3','wb') as f:f.write(m_resp.content)

在这里插入图片描述
运行即可下载我们的资源,做到这里肯定有人疑问。我们完全可以直接点击下载,然后还费气力写十几行代码,你是不是闲的,但是如果我们只是为了获取一首歌,这确实是大材小用了。
在这里插入图片描述
所以我们写代码的优势是把列表的所有音乐都下载下来,包括vip歌曲通通实现批量下载。
再次我们来到网站发现找不到MP3的URL,很明显对方进行了反爬技术,没关系我们直接搜索MP3,然后依次点击下图
在这里插入图片描述
点击标头,我们可以获取音乐播放地址。选中它复制,然后打开新的浏览器标签,粘贴,回车。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后一行就是我们要获取的mp3地址

# 音乐信息的url
info_url =f'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19105573930103029792_1674098129306&dfid=4FIPhF1c46Ak3cUQAZ1aB0Bg&appid=1014&mid=6ba6257adf26ea14512f51070a2a135e&platid=4&encode_album_audio_id=n0800ae&_=1674098129307'

在这里插入图片描述
找到hash值,然后在列表页右键检查——搜素hash值
在这里插入图片描述
在这里插入图片描述
此时我们就获取一个音乐列表。此时基本完成。完整代码如下所示:

# pip install requests 
import requests # 发送请求的用的模块
import json
# 伪装自己
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}
# 音乐列表
list_url ='https://complexsearch.kugou.com/v2/search/song?callback=callback123&keyword=%E5%A4%A7%E9%B1%BC&page=1&pagesize=30&bitrate=0&isfuzzy=0&tag=em&inputtype=0&platform=WebFilter&userid=-1&clientver=2000&iscorrection=1&privilege_filter=0&srcappid=2919&clienttime=1599051318654&mid=1599051318654&uuid=1599051318654&dfid=-&signature=1FED2963D7BF17379D7B50F558C23A4E'
list_resp = requests.get(list_url,headers=headers)
song_list = json.loads(list_resp.text[12:-2])['data']['lists']
for i, s in enumerate(song_list):print(f'{i+1}----{s.get("SongName")}----{s.get("FileHash")}')num = input('请输入要下载第几首音乐:')
# 音乐信息的url
info_url =f'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash={song_list[int(num)-1].get("FileHash")}'
# 
headers2={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36','Cookie':'kg_mid=a256175cc199d208f8ddb5e3caa0f041; kg_dfid=0QqwxT4aMAGF0vizqf0lYbwW; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1598948948,1599049820; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1599051319'
}
info_resp = requests.get(info_url,headers=headers2)
# 音乐的url地址
m_url = info_resp.json()['data']['play_url']
# 发送请求到服务器,获取音乐资源
m_resp = requests.get(m_url,headers=headers)
# 服务器回应的数据--保存数据
with open('zzz.mp3','wb') as f:f.write(m_resp.content)'''
服务器响应的数据结果  
.text 代表访问的数据是文字  
.content代表访问的数据是多媒体文件(图片,音乐,视频,文件) 
.json() 访问的文字是json类型
'''

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

纯CSS实现的右侧底部简洁悬浮效果

一、实现效果: 正常显示 鼠标悬停 鼠标悬停 前期准备的背景图,本来是 透明的,为了显示方便,我将背景…

Python基础专题 - 超级详细的 Random(随机)原理解析与编程实践

Python基础专题 - Random(随机)详解李俊才 的 CSDN 博客 邮箱 :291148484163.com CSDN 主页:https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 本文地址:https://blog.csdn.net/qq_28550263/article/det…

android标题栏渐变简书,自定义ViewGroup_标题栏的悬浮吸顶渐变效果

之前帮朋友写了这样的一个效果:标题栏中的元素随着屏幕的滑动发生渐变的效果,有文字大小的渐变也有透明度和距离的渐变等,后面没有及时更新上来,今天补一下。效果图如下:思路 原理OK,先来说下思路&#xf…

Minecraft 1.19.2 Forge模组开发 11.Mixin

我们本次使用Mixin在1.19.2中制作一个属于自己的不死图腾。 演示效果演示效果演示效果 什么是Mixin? 简单来说是通过注入一些我们的代码,达到对MC原版内容的修改。 详细内容可以参考Minecraft 17.1 Mixin 1.首先我们需要在开发包中引入mixin的依赖&a…

测试时出现警告:WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective acc

问题描述 今天在运行一个功能的测试用例的时候,出现了如下警告: WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v9.Java9 (file:/C:/Users/26808/.m2/repositor…

C/C++反汇编与逆向分析学习笔记(2)--反汇编静态分析工具IDA

所谓“静态分析”,是相对于前面提到的“动态分析”而言的。在“动态分析”过程中,调试器加载程序,并以调试模式运行起来,分析者可以在程序的执行过程中观察程序的执行流程和计算记过。但是,在实际分析中,很…

linux设备树概念及使用方法简述

设备树(DT)是易于阅读的硬件描述文件,它采用JSON式的格式化风格,在这种简单的树形结构中, 设备表示为带有属性的节点。属性可以为空(只有键,用来描述布尔值),也可以是键值…

【Blender】源代码分析_第三方库的说明

Blender 使用了不少第三方库,使用freemind绘图如下所示,注释部分有些不能准确翻译的请留言帮忙修正。 Blosc Blosc - Blocked Shuffling and Compression Library Embree Embree is a collection of high-performance ray tracing kernels, developed a…

FPGA知识汇集-关于Xilinx 工具报告

工具报告概述 FPGA综合和物理实现工具产生许多种报告,包含了错误和警告、逻辑利用、设计频率、时序、时钟等信息。需要设计者了解大量有关设计工具的知识才能阅读报告,以及迅速找到所需信息。Xilinx 和其他 FPGA 设计工具还能将报告中的一些最重要和最常用的信息用图形显示出来…

Vue+Element 国际化(i18n)

第一步:安装 i18n 这里为了让 Element 兼容,安装的是 8 版本的 npm install vue-i18n8 第二步:在 src 目录下新建一个i18n文件 一般有三个文件:index.js( 配置 )、zh( 中文 )、en( 英文 ) 如果有个更多的语言设置,新…

ise 界面参数

7.5 实现属性参数设置选项功能1)翻译属性(Translate Properties):a、使用位置约束(Use LOC Constraints):指定在输入网表或者UCF文件中是否使用位置约束,当设置为否时,NGDBuild忽略任何会导致错误的无效位 置信息, 在命…

【黑马学成在线2023版】解决P7创建父工程时Maven的pom文件依赖爆红问题(亲测有效)

本期目录问题描述解决方案问题描述 感谢黑马贡献的高质量视频教程《学成在线》微服务项目。笔者在学到《P7-创建父工程基础工程》时&#xff0c;直接粘贴黑马老师的 pom 文件中的依赖会出现依赖的 <artifactId> 和 <version> 爆红&#xff0c;显示无法找到依赖的错…

【文献翻译-部分】Nature:生物信息深度神经网络在前列腺癌发现中的应用【非专业】

研究方向非生信领域&#xff0c;只是学习一下模型&#xff0c;所以有关生物&#xff08;结论&#xff09;的部分没有翻译 文章目录摘要引言结果讨论方法1 - P-NET设计2 - P-NET训练和评估3 - 统计分析4 - 基因组规模ORF筛选分析5 - 对RO-5963的敏感性6 - MDM4基因缺失实验7 - 免…

C#中Action和=>用法(入门)

Action就相当于一个委托&#xff0c;>(Lambda表达式)后面跟的是一个函数体。在我看来Action和>合在一起就相当于给一个没有函数名的函数做了一个委托。使用时只需要调用委托就可以使用函数。 示例代码如下&#xff1a; using System; using System.Collections.Generic…

http中的表单action

<form action"/search0/" method"get"><input type"text" name"q"><input type"submit" value"搜索"></form>以上为表单代码。 官方解释说&#xff0c;action属性规定当提交表单时&#…

智合同丨你还在为填写合同台账犯愁吗?

最近有朋友问我有没有什么智能化手段处理合同台账问题&#xff1f;对方表示合同台账管理实在是太麻烦了&#xff0c;工作量大&#xff0c;占用时间多。答案肯定是有的&#xff0c;那么首先我们来了解下合同台账。合同台账一般指合同台帐&#xff0c;包括合同登记台帐、合同检查…

Struts2_拦截器(Action拦截和全局拦截)

事实上&#xff0c;机场比婚礼殿堂见证了更多真挚的亲吻&#xff0c;医院的墙壁比教堂的聆听了更多祷告。 拦截器有三种方式&#xff1a; ①Action拦截 ②全局拦截 ③方法拦截 先说说什么是拦截器&#xff1a; 拦截器&#xff0c;顾名思义&#xff0c;拦截请求(Action)&…

java中action类是干嘛的_java中action的作用

正如早先指出的那样&#xff0c;action()并不是我们对所有事进行分类后自动为handleEvent()调用的唯一方法。有三个其它的被调用的方法集&#xff0c;如果我们想捕捉某些类型的事件(键盘、鼠标和焦点事件)&#xff0c;因此我们不得不过载规定的方法。这些方法是定义在基础类组件…

elementUI上传文件、及属性action遇坑

element UI的上传的属性说明文档说了&#xff0c;action必须得是string类型的&#xff0c;当你只改action的路径&#xff0c;但是接口要传参就会报错&#xff0c;我们必须要加上一个http-request这个属性&#xff0c;原因以下截图。 然后在函数中&#xff0c;请求接口传送参数…

action请求是什么意思_html form标签的action属性是什么意思?又有哪些用法?(附实例)

本篇文章主要的介绍HTML form表单标签的action属性的用法&#xff0c;用法介绍和实例等都在里面&#xff0c;现在让我们一起来看吧首先我们先来介绍一下关于HTML form标签的action属性的意思&#xff1a;form标签的action属性是一个表单当中必须的属性&#xff0c;action属性规…