酷狗音乐关键字搜索并生成下载url
酷狗音乐关键字搜索并生成下载url
1. 获取搜索的歌单信息
通过在酷狗音乐进行关键字搜索,并通过F12检测,发现网页给网站发送了get请求。
https://complexsearch.kugou.com/v2/search/song?callback=callback123&keyword=%E7%A8%BB%E9%A6%99&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=1598343363775&mid=1598343363775&uuid=1598343363775&dfid=-&signature=09553BE20E21CF594C911530E4F71A07
其中keyword是搜索关键字,clienttime,mid,uuid均是时间戳,其他数值除signature经过检查均为固定值,针对signature的解码过程如下:
通过设置断点,可以获得signature,其获取流程如下:
str = {"NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt"
"bitrate=0"
"callback=callback123"
"clienttime=1598347379352"
"clientver=2000"
"dfid=-"
"inputtype=0"
"iscorrection=1"
"isfuzzy=0"
"keyword=稻香"
"mid=1598347379352"
"page=1"
"pagesize=30"
"platform=WebFilter"
"privilege_filter=0"
"srcappid=2919"
"tag=em"
"userid=-1"
"uuid=1598347379352"
"NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt"}
md5 = hashlib.md5()
md5.update(''.join(str).encode())
signature = md5.hexdigest()
# keyword是搜索关键字,clienttime,mid,uuid均是时间戳
时间戳为毫秒级(13位),需要自己实现函数,于是本人为了省事直接使用了前人用过的搜索url,似乎还可以使用(这样可以增加处理速度):
https://songsearch.kugou.com/song_search_v2?keyword={}&platform=WebFilter
2. 获取下载外链
类似于获取歌单信息,打开一首歌并播放,按传输数据的大小排序,可是我们并没有发现存在较大的数据量的请求,经过慢慢检查,筛选出这条信息内包含我们所需的播放url:
通过对header中的url进行简化处理,发现获取音乐下载url的url形式如下所示:
https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash={}&mid={}
hash可以通过1中的json数据获得,mid可以通过在’abcdefghijklmnopqrstuvwxyz0123456789’中任选4个字符,并使用md5加密获得。
由于没有酷狗VIP的账号,因此无法仅能下载VIP音乐片段。
3. 完整代码
import urllib.request,os,json
from urllib.parse import quote
import random
import requests
import time
from selenium import webdriver
import hashlibdef set_user_agent():USER_AGENTS = ["Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)","Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)","Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)","Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)","Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1","Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0","Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5"]user_agent = random.choice(USER_AGENTS)return user_agentclass KuGou():def __init__(self):self.get_music_url='https://songsearch.kugou.com/song_search_v2?keyword={}&platform=WebFilter'self.get_song_url='https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash={}'self.headers = {'User-Agent': set_user_agent()}def parse_url(self,url):response = requests.get(url,headers = self.headers)return response.content.decode()def get_music_list(self,keyword):url = self.get_music_url.format(quote(keyword))music_dirt = json.loads(self.parse_url(url))music_list = music_dirt['data']['lists']return music_listdef creat_mid(self):md5 = hashlib.md5()# 随机生成4位随机的字符列表 范围为a-z 0-9n = random.sample('abcdefghijklmnopqrstuvwxyz0123456789', 4)# 将列表元素拼接为字符串n = ''.join(n)# 将字符串编码后更新到md5对象里面md5.update(n.encode())# 调用hexdigest获取加密后的返回值result = md5.hexdigest()return resultdef get_download_url(self, key):music_list = self.get_music_list(key)cnt = 0words = '酷狗:\n'for music in music_list:if cnt == 3:breakcnt = cnt + 1music_id = music['FileHash']# print(type(music_id))music_name = music['SongName']music_author = music['SingerName']music_album = music['AlbumName']words = words + '专辑名:' + music_album + '\n'words = words + '歌名:' + music_name + '\n'words = words + '歌手:' + music_author + '\n'song_url = self.get_song_url.format(music_id) + '&mid=' + self.creat_mid()response = json.loads(requests.get(song_url, headers = self.headers).content.decode())download_url = response['data']['play_url']if download_url:words = words + '下载链接:' + download_url + '\n'else:words = words + '下载链接:' + '无' + '\n'return wordsif __name__ == '__main__':kugou=KuGou()print(kugou.get_download_url('许嵩浅唱'))
酷狗音乐关键字搜索并生成下载url相关推荐
- 网易云音乐关键字搜索并生成下载url
网易云音乐关键字搜索并生成下载url 一.获取搜索的歌单信息 通过在网易云音乐进行关键字搜索,并通过F12检测,发现网页给网站https://music.163.com/weapi/cloudse ...
- QQ音乐关键字搜索并生成下载url
QQ音乐关键字搜索并生成下载url 1. 获取搜索的歌单信息 通过在QQ音乐进行关键字搜索,并通过F12检测,发现网页给网站https://c.y.qq.com/soso/fcgi-bin/cli ...
- Python从网易云音乐、QQ 音乐、酷狗音乐等搜索和下载歌曲
music-dl 从网易云音乐.QQ音乐.酷狗音乐.百度音乐.虾米音乐等搜索和下载歌曲. Search and download music from netease, qq, kugou, baid ...
- Python从网易云音乐、QQ 音乐、酷狗音乐等搜索和下载歌曲!
music-dl 从网易云音乐.QQ音乐.酷狗音乐.百度音乐.虾米音乐等搜索和下载歌曲. Search and download music from netease, qq, kugou, baid ...
- android高仿酷狗音乐播放器源码下载
这是一款简单的读取SD卡音乐文件进行播放.暂停.删除.切歌等功能的高仿酷狗音乐播放器. 主要功能: 模块 简要说明 扫描SD卡音乐 扫描SD卡,并显示出本地音乐列表 提供歌词跟随音乐滚动更能 采用 ...
- 关于酷狗音乐api搜索歌手信息的问题
做音乐网站要实现展示歌手歌曲的功能,看了许多api,感觉就酷狗的简单,好用,这是原作者的方法,原文大概如下: 酷狗MP3链接需要两个接口获取: hash获取接口: http://songsearch. ...
- 我是如何利用Python下载酷狗音乐的
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 万战自称不提刃,生来双眼篾群容. ...
- python爬虫实战之逆向分析酷狗音乐
文章目录 前言 一.请求分析 二.逆向思路 三.全部代码 总结 前言 声明:本文章只是用于学习逆向知识,仅供学习,未经作者同意禁止转载 对于爬虫而言,不管是什么类型的都会遵循这几个步骤 获取目标url ...
- Python从网易云音乐、QQ 音乐、酷狗音乐、虾米音乐等搜索和下载歌曲
music-dl 从网易云音乐.QQ音乐.酷狗音乐.百度音乐.虾米音乐等搜索和下载歌曲. Search and download music from netease, qq, kugou, baid ...
最新文章
- opencart导入导出export/import功能插件
- 2021年春季学期-信号与系统-第二次作业参考答案-第一小题
- 【剑指offer-Java版】28字符串的排列
- 一次哔哩哔哩面试经历,真香!
- Hadoop的调度器总结
- @ConditionalOnClass注解的作用
- ITK:计算纹理特征
- smarty5变量修改器
- java如何使用配置文件_如何使用java.util.Properties读取配置文件?
- python中print的用法_Python中print函数简单使用总结
- linux python3_在Linux上安装Python 3
- mysql 错误编码_【分享】MySQl操作系统提示错误编码
- 卸载sqlserver
- Pycharm 简单一步设置成官方中文版
- 科研伦理与学术规范-期末考试答案
- (2020.9.28)面试记录:软件测试实习生--面试记录
- 累次积分怎么计算_请问累次积分和多重积分的区别
- 视频教程-Oracle12数据库管理/DBA/数据库工程师培训-Oracle
- 关于java8的default关键字浅薄理解
- Microservices vs SOA - 微服务与SOA
热门文章
- Python 语言及其应用 Chapter_3_Note_2 容器_列表_元组_字典_集合
- 建网站选择网络诚信专属.xin域名,诚信赢天下!
- 【Linux网络编程】网络基础知识
- idea与svn的安装及集成
- 信息量理解、信息熵公式的推导
- 如何通过U盘给笔记本安装Ubuntu系统
- SAP ABAP 小数转分数\约分
- 如何在vscode上运行调试C++(最简单的方法)
- 沁恒CH552G实现最小系统[沁恒8位机MCU最小系统]
- ASP.NET的隐藏功能[关闭]