赞
踩
目录
2.搜索页面和播放页面的两个signature的解密操作:MD5加密
3.通过音乐ID爬取当前音乐的md3地址。也就是第一个操作部分(音乐获取)
4.通过搜索栏参数(音乐名)获取 搜索第一个的 音乐名 和 音乐id。 也就是第二个步骤(搜索指定获取)操作。
5.获取到此音频地址后,对地址发送请求,将请求得到的数据以二进制的方式保存到指定目录文件夹中。
6.判断文件是否存在。不存在则创建改文件。此文件为获取后保存的文件
为一起学习或者有兴趣python爬虫的朋友提供实战项目,以及也是我个人的学习记录
此篇文章更倾向于学习记录,所以我不会在开头就说明这个东西是什么,那个东西是什么,而是一步一步,遇到什么讲解什么,也请读者能尽量按顺序按部就班的阅读.
hashlib => md5加密:提供了许多加密哈希算法,包括MD5、SHA-1、SHA-256等。
os => 提供了访问操作系统功能的方法,例如文件操作、目录操作、进程管理等。
time => 提供了处理时间的函数,包括获取当前时间、延时等功能。
requests => 用于发送HTTP请求和处理响应。
re => 提供了正则表达式操作的函数,用于在字符串中搜索、匹配和替换文本。
json => 用于处理JSON数据,用于JSON格式转换。
tkinter => 提供了创建图形用户界面(GUI)的工具包,可以用于构建窗口、按钮、文本框等GUI元素
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43031450/article/details/137141065
一步一步探索网站中的内容完成此次爬取所需要的基础网络内容,说明酷狗音乐网页爬取音乐的基础思路.
首先进入酷狗音乐的网址:酷狗音乐
在页面搜索栏输入你想搜索的音乐,并搜索(也可以世界在主页直接点击一首音乐播放,不过后面还是要涉及搜索操作的,建议跟着我的步骤来):
进入了搜索结果页面点击播放第一首歌曲,进入单曲详情界面(播放界面)且接下来的思路概念理解操做都将围绕这两个加粗显示的界面开展:
进入歌曲播放页面,按"F12" 或者鼠标右键选择"检查"打开开发者面板:
此时点击网络(network)-->媒体(media)-->清除网络日志-->刷新页面,大概率能在媒体中出现.mp3文件如果不行 " 一段一段的拖动播放进度条",到达末尾或中间部分的时候会出现mp3文件.(具体原因不太清楚)
接下来点击这个媒体文件可以看见他的请求URL
URL(Uniform Resource Locator,统一资源定位符)是互联网上用来标识某一处资源的地址。它作为网页、文件、图片、视频或其他任何网络上可访问资源的地址,允许用户通过浏览器或其他网络客户端访问这些资源。
在这里说人话就是,这一长串网址指向 这首歌 存在于 网络中的本体如果我们直接复制这段网址会到达这个界面,而在这个界面我们将可以直接下载这首歌曲.
下图中我所画出红色横线(由.mp3往前到第一个斜杠的位置)也可以说被选中的这一块,即是我们此次基本思路中最重要的角色,最需要被理解的一部分现在我们的理解可以是,他在这段大长串地址中的"歌曲ID"(后面会有真的歌曲ID)因为他唯一且指向唯一的一首音乐.接下来的认识中他也会以不止一种名字被称呼如 "hash值"或"signature"(所以你搜的音乐不同,这个值也不同,不用担心)
为什么是网址的这一块,为什么是signature,别问,平台是这么设计的
现在我们要做的是根据这个歌曲的signature反推出歌曲的来源(谁给我们反馈出这个url让我们知道该去这下载的? 0.o)
这个网址指向的是资源的本体,相当于我们此次项目搜索音乐的结果,目标,而此前而之前的搜索歌曲,播放歌曲,都已经在我们的网页中完成了,现在我们要反推,去完成完整爬取过程
按下"CTRL + F"打开开发者面板的搜索栏粘贴我们复制的signature并搜索,看到info,我的第一想法就是information,信息,因此我们的音乐信息就存储在" songinfo" 当中随便点一个搜索结果进入songinfo,通过对比我们可以发现,刚才指向资源的url就在响应信息的" play_url"当中,算是来对地方了
,然后点击" 负载(payload)"就可以看到与这首音乐相关的各种id巴拉巴拉有待深入了解.
我们对比一下现在知道了songinfo中有我们要的play_url,我们又该如何获取songinfo的URL呢,观察songinfo的请求URL,再对比songinfo"负载"中的信息,我们可以惊奇的发现,好像songinfo的URL的主体只有" https://wwwapi.kugou.com/play/songinfo? "! ! ! ! !,没错除了这段主题实际上其他的都是参数
将会作为代码部分函数"fetch_url"的datas部分(没看到的不用注意此句)
并且 如果你重新回到之前的步骤选择一首其他的音乐,再次找到这里后你会发现,每个音乐"负载"中的信息除了clienttime,encode和signature三个参数以外的参数都不会有改变
我们现在知道了,实际上在网页中搜索的音乐信息clienttime,encode和signature不同
clienttime和encode_album_audio_id好理解,一个是时间戳,一个是音乐ID,那现在只有一个问题:
先前我所说,signature是一个"歌曲ID",但我又说有真的歌曲ID,不是哥们儿, 那这个signature到底是谁,谁家好人无聊给一个音乐设置"两个"ID?
实际上,这是平台设计的,通过结合所有的参数进行"MD5"加密后得出的一段用于发送请求的参数,是一段哈希值,也就是说signature实际上是一个在其他参数都存在,依附在其他参数之上的额外一层保密层,
因为音乐的play_url是以signature为主要指向参数的
1.除了clienttime,encode和signature都是固定值
2.signature是结合其他所有值通过MD5加密出来的32位数字.
所以我们获取时间,给出音乐ID,使用现成的MD5加密就能得到即可以获取到音乐URL
这也是在酷狗上爬取音乐的核心信息
这个MD5超出了我的知识范围就这样理解下吧
MD5(Message Digest Algorithm 5,消息摘要算法第五版)是一种广泛使用的哈希函数,它可以产生一个128位(16字节)的哈希值,通常用一个32位的十六进制字符串表示。MD5由Ron Rivest在1991年设计,最初被用来作为一种安全的密码哈希算法。
MD5的主要特点包括:
固定长度输出:无论输入数据的大小如何,MD5算法都会产生一个固定长度(128位)的哈希值。
散列唯一性:理论上,不同的输入数据应该产生不同的哈希值。MD5设计时旨在减少哈希碰撞的概率,即不同的输入产生相同输出的情况。
快速计算:MD5算法计算速度快,适用于需要快速哈希处理的场景。
单向性:MD5是单向的,意味着从哈希值几乎不可能反推出原始数据。
易于实现:MD5算法相对简单,容易在各种软件和硬件平台上实现。
现在我们按下" CTRL + shift + F " 打开全局搜索界面(图中问题可以结合原著看一下,我是不太懂)
将会作为代码部分函数"MD5_sign"的lists部分(没看到的不用注意此句)
以上就为我们爬取什么,从哪爬取,怎么爬取,我能理解的所有思路和概念了也是关于单曲详情界面(播放界面)的相关概念的理解
想必各位对爬的理解也如下所示:
"爬一首音乐"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。