酷狗音乐关键字搜索并生成下载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相关推荐

  1. 网易云音乐关键字搜索并生成下载url

    网易云音乐关键字搜索并生成下载url 一.获取搜索的歌单信息 ​ 通过在网易云音乐进行关键字搜索,并通过F12检测,发现网页给网站https://music.163.com/weapi/cloudse ...

  2. QQ音乐关键字搜索并生成下载url

    QQ音乐关键字搜索并生成下载url 1. 获取搜索的歌单信息 ​ 通过在QQ音乐进行关键字搜索,并通过F12检测,发现网页给网站https://c.y.qq.com/soso/fcgi-bin/cli ...

  3. Python从网易云音乐、QQ 音乐、酷狗音乐等搜索和下载歌曲

    music-dl 从网易云音乐.QQ音乐.酷狗音乐.百度音乐.虾米音乐等搜索和下载歌曲. Search and download music from netease, qq, kugou, baid ...

  4. Python从网易云音乐、QQ 音乐、酷狗音乐等搜索和下载歌曲!

    music-dl 从网易云音乐.QQ音乐.酷狗音乐.百度音乐.虾米音乐等搜索和下载歌曲. Search and download music from netease, qq, kugou, baid ...

  5. android高仿酷狗音乐播放器源码下载

    这是一款简单的读取SD卡音乐文件进行播放.暂停.删除.切歌等功能的高仿酷狗音乐播放器. 主要功能: 模块 简要说明 扫描SD卡音乐 扫描SD卡,并显示出本地音乐列表 提供歌词跟随音乐滚动更能   采用 ...

  6. 关于酷狗音乐api搜索歌手信息的问题

    做音乐网站要实现展示歌手歌曲的功能,看了许多api,感觉就酷狗的简单,好用,这是原作者的方法,原文大概如下: 酷狗MP3链接需要两个接口获取: hash获取接口: http://songsearch. ...

  7. 我是如何利用Python下载酷狗音乐的

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 万战自称不提刃,生来双眼篾群容. ...

  8. python爬虫实战之逆向分析酷狗音乐

    文章目录 前言 一.请求分析 二.逆向思路 三.全部代码 总结 前言 声明:本文章只是用于学习逆向知识,仅供学习,未经作者同意禁止转载 对于爬虫而言,不管是什么类型的都会遵循这几个步骤 获取目标url ...

  9. Python从网易云音乐、QQ 音乐、酷狗音乐、虾米音乐等搜索和下载歌曲

    music-dl 从网易云音乐.QQ音乐.酷狗音乐.百度音乐.虾米音乐等搜索和下载歌曲. Search and download music from netease, qq, kugou, baid ...

最新文章

  1. opencart导入导出export/import功能插件
  2. 2021年春季学期-信号与系统-第二次作业参考答案-第一小题
  3. 【剑指offer-Java版】28字符串的排列
  4. 一次哔哩哔哩面试经历,真香!
  5. Hadoop的调度器总结
  6. @ConditionalOnClass注解的作用
  7. ITK:计算纹理特征
  8. smarty5变量修改器
  9. java如何使用配置文件_如何使用java.util.Properties读取配置文件?
  10. python中print的用法_Python中print函数简单使用总结
  11. linux python3_在Linux上安装Python 3
  12. mysql 错误编码_【分享】MySQl操作系统提示错误编码
  13. 卸载sqlserver
  14. Pycharm 简单一步设置成官方中文版
  15. 科研伦理与学术规范-期末考试答案
  16. (2020.9.28)面试记录:软件测试实习生--面试记录
  17. 累次积分怎么计算_请问累次积分和多重积分的区别
  18. 视频教程-Oracle12数据库管理/DBA/数据库工程师培训-Oracle
  19. 关于java8的default关键字浅薄理解
  20. Microservices vs SOA - 微服务与SOA

热门文章

  1. Python 语言及其应用 Chapter_3_Note_2 容器_列表_元组_字典_集合
  2. 建网站选择网络诚信专属.xin域名,诚信赢天下!
  3. 【Linux网络编程】网络基础知识
  4. idea与svn的安装及集成
  5. 信息量理解、信息熵公式的推导
  6. 如何通过U盘给笔记本安装Ubuntu系统
  7. SAP ABAP 小数转分数\约分
  8. 如何在vscode上运行调试C++(最简单的方法)
  9. 沁恒CH552G实现最小系统[沁恒8位机MCU最小系统]
  10. ASP.NET的隐藏功能[关闭]