Python反爬实战掌握酷狗音乐排行榜加密规则
作者:五包辣条! 时间:2021-05-29 08:05:57
效果展示
爬取目标
网址:酷我音乐
工具使用
开发工具:pycharm
开发环境:python3.7, Windows10
使用工具包:requests,re
项目思路解析
找到需要解析的榜单数据
随意点击一个歌曲获取到音乐的详情数据 通过抓包的方式获取到音乐播放数据
找到MP3的数据提交地址 mp3数据来自于这个url地址
提交数据的网址:
https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19102816534571347611_1626783818555&hash=A38449E76C74D45825F565C1FDB825C0&dfid=3dKstH1sJdRa44o6Vj0ZIryF&mid=4458f6d567640b39de367a394d69879e&platid=4&album_id=40437970&_=1626783818556
将多个网址数据进行对比看看哪些参数是需要自行修改的
变化的url数据有3个
hash
album_id
_
_ 可以明显看出来是时间戳 需要获取到对应的hash以及album_id的值 来到主页找寻对应的歌曲id数据 发现数据来自网页源代码
歌曲的数据都是来自网页源代码
梳理整体思路:
从首页源码里提取出对应的hash、album_id值
组合成新的url地址
获取到json数据总的歌曲播放地址
简易源码分享
本章内容只限学习,切勿用作其他用途!!!!!
import requests
import re
import time
def Tools(url):
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70'
}
response = requests.get(url, headers=headers)
return response
def Save(name, url):
mp3 = Tools(url).content # 请求mp3地址链接 返回格式是16进制
f = open('./kugou/{}.mp3'.format(name), 'wb') # w 文件存在就写入 不存在就会创建 b进制读写
f.write(mp3)
f.close()
print('{}下载完成....'.format(name))
url = 'https://www.kugou.com/yy/html/rank.html'
response = Tools(url).text
album_id = re.findall(r'"album_id":(\d*?),', response) # id
Hash = re.findall(r'"Hash":"(.*?)",', response) # hash
for a, h in zip(album_id, Hash):
# 生成时间戳
time1 = int(time.time() * 1000)
# 包含歌曲下载地址的url
urls = 'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash={}&dfid=0zlWqK0UWNFa0weUnX0hjlFa&mid=f79511e2e86914b99e351c42ba1f8bc7&platid=4&album_id={}&_={}'.format(h, a, time1)
response1 = Tools(urls).json()
audio_name = response1['data']['audio_name'].split('-')[1]
play_url = response1['data']['play_url']
Save(audio_name, play_url)
来源:https://blog.csdn.net/AI19970205/article/details/118944328
标签:Python,反爬,酷狗,排行榜
0
投稿
猜你喜欢
Python使用自带的ConfigParser模块读写ini配置文件
2022-04-01 00:07:01
Windows下Python使用Pandas模块操作Excel文件的教程
2021-01-05 23:07:40
Python开发之pip安装及使用方法详解
2022-11-27 06:22:48
原生JS实现旋转木马式图片轮播插件
2024-04-17 09:45:08
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2021-06-29 20:05:21
vue中的mescroll搜索运用及各种填坑处理
2024-04-30 10:26:39
Django项目优化数据库操作总结
2024-01-20 11:25:50
python修改字典键(key)的方法
2023-04-16 20:26:57
Python实现五子棋联机对战小游戏
2023-10-21 05:25:42
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2024-06-07 15:27:15
PHP 使用redis简单示例分享
2024-05-05 09:18:16
python用moviepy对视频进行简单的处理
2023-08-03 07:02:15
详解如何通过Python制作一个密码生成器
2023-11-24 10:36:43
java学习指南之字符串与正则表达式
2022-02-23 14:05:50
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2022-11-29 08:22:38
python-pymongo常用查询方法含聚合问题
2021-02-10 21:35:36
iis、apache与nginx禁止目录执行asp、php脚本的实现方法
2023-10-14 11:30:26
Python设计模式行为型责任链模式
2021-08-15 05:58:16
Go 语言下基于Redis分布式锁的实现方式
2024-04-25 13:17:24
CSS 几条经典的 CSS Tips
2008-08-20 18:40:00