酷狗音乐是一款非常不错的软件,包含着音乐软件所有该有的功能。
初中开始接触上网,下载歌曲便一直用酷狗音乐。想当初自己年少无知啊,好不容易凑够5块钱上了2个小时的网,结果愣是一首歌没下载下来,下载的全是歌词文件!我兴高采烈地往自己的mp4里传输,结果发现不能播放!网吧时间到了,口袋钱空了,歌没下下来,当时气死老子了。这也可以说是一段难忘的经历啊。
上了大学以后,为了配合我稍微有一点那么文绉绉的气质,开始跟随网易大军,使用网易云音乐,开启我的高逼格历程!大学毕业,气质全无,我觉得我配不上网易云了,又投入了酷狗音乐的怀抱[笑哭]。
这不,这两天重看《双世宠妃2》,再一次深深地迷上了里面的曲檀儿(梁洁饰演)【花痴】,配合叶炫清的《归去来兮》,简直了!【好像屌丝本质一览无余?才不是,是欣赏!哈哈】
开始分析:
MV链接:https://www.kugou.com/mvweb/html/mv_866733.html
想直接看的,可跳转过去哦!
第一步:打开酷狗WEB,搜索《归去来兮》,点击
第二步:点击音乐播放界面的mv,进行跳转到播放页面。
简直了,美美美
哈哈,别忘了正事!
第三步:右键(Chrome)检查,Ctrl+F搜索"归去来兮",结果如下:
可以看出,这里面有我们需要的MV的标题和MV的哈希值。至于哈希值是啥,待会再解释。
获取到它们,方法如下:
access_url ="链接地址"# 移除SSL验证时的警告urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)response = requests.get(access_url, headers=headers, verify=False)html = response.textweb_data = etree.HTML(html)datas = web_data.xpath('//script[@type="text/javascript"]')x = datas[1].xpath('./text()')[0].strip().split('.')[0].split(',')mv_hash = x[1].split('"')[1]mv_title = x[2].split('"')[1]print('MV哈希值:%s,MV标题:%s'%(mv_hash,mv_title))# 划重点:获取keykey = kugou_hash(mv_hash)
第四步?
在开始第四步之前,先用网上的解释来说明什么是哈希加密!
转载链接:https://www.liaoxuefeng.com/wiki/897692888725344/923057313018752
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
举个例子,你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'。如果有人篡改了你的文章,并发表为'how to use python hashlib - by Bob',你可以一下子指出Bob篡改了你的文章,因为根据'how to use python hashlib - by Bob'计算出的摘要不同于原始文章的摘要。
可见,摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。
摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
好,接下来,第四步:用hash得到key!
m = hashlib.md5() # 哈希 md5加密kugou_slat = 'kugoumvcloud' # 盐m.update((mv_hash + kugou_slat).encode("utf8")) # 哈希值+盐key = m.hexdigest()return key # 返回key值
第五步:刷新页面,右键检查,Network,搜索key,得到如下结果:
可以看到,这里面就有我们想要的超清画质的下载链接!
第六步:既然找到了最后的下载链接,那下载自然就不在话在!开搞!
download_url = "http://trackermv.kugou.com/interface/index/cmd=100&hash={}&key={}&pid=6&ext=mp4&ismp3=0".format(mv_hash,key)hash_res = requests.get(download_url, headers=headers)hash_js = hash_res.json() # json格式try: play_url = hash_js['mvdata']['rq']['downurl'] file_suffix = play_url.split('/')[-1].split('.')[-1] if play_url !="": print('1080P MV下载地址已找到,请稍候...') with open(save_path_real+mv_title + "." + file_suffix, "wb")as fp: fp.write(requests.get(play_url).content) print('>>>1080P下载完成!!!')
至此,我们想要的超清MV便可收入囊中!演示:
最后,附上源码:
import requestsimport hashlibfrom lxml import etreeimport urllib3import winregimport os# mv保存地址def get_desktop(): key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders') return winreg.QueryValueEx(key, "Desktop")[0]save_path_real = get_desktop()+'\\' + "酷狗音乐MTV" + "\\"headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) \AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}print('>>>>>>>>>>>>酷狗MV下载程序开始<<<<<<<<<<<<<\n')print('>>>>>>>>>>>>示例URL:http://www.kugou.com/mvweb/html/mv_1138506.html<<<<<<<<<<<<<\n')# 获取mv的hash和titledef get_mv_name_hash(html, save_path_real): web_data = etree.HTML(html) datas = web_data.xpath('//script[@type="text/javascript"]') x = datas[1].xpath('./text()')[0].strip().split('.')[0].split(',') mv_hash = x[1].split('"')[1] mv_title = x[2].split('"')[1] print('MV哈希值:%s,MV标题:%s'%(mv_hash,mv_title)) # 获取key key = kugou_hash(mv_hash) # 下载MV download_mv(mv_title,mv_hash,key,save_path_real)# 哈希加密的教程链接,转1:https://www.jianshu.com/p/cc2468b82e90# 哈希加密的教程链接,转2:https://www.jianshu.com/p/cb77838c69db# 得到key# 传入MV哈希值 返回KEY值def kugou_hash(mv_hash): m = hashlib.md5() # 哈希 md5加密 # #song_hash_upper=mv_hash.upper()#大写 kugou_slat = 'kugoumvcloud' # 盐 m.update((mv_hash + kugou_slat).encode("utf8")) # 哈希值+盐 key = m.hexdigest() return key # 返回key值# 下载def download_mv(mv_title,mv_hash,key,save_path_real): if not os.path.exists(save_path_real): os.mkdir(save_path_real) print("%s正在下载,请稍候..."%mv_title) download_url = "http://trackermv.kugou.com/interface/index/cmd=100&hash={}&key={}&pid=6&ext=mp4&ismp3=0".format(mv_hash,key) hash_res = requests.get(download_url, headers=headers) hash_js = hash_res.json() # json格式 try: play_url = hash_js['mvdata']['rq']['downurl'] file_suffix = play_url.split('/')[-1].split('.')[-1] if play_url !="": print('1080P MV下载地址已找到,请稍候...') with open(save_path_real+mv_title + "." + file_suffix, "wb")as fp: fp.write(requests.get(play_url).content) print('>>>1080P下载完成!!!') except: try: play_url = hash_js['mvdata']['sq']['downurl'] file_suffix = play_url.split('/')[-1].split('.')[-1] if play_url !="": print('720P MV下载地址已找到,请稍候...') with open(save_path_real+mv_title + "." + file_suffix, "wb")as fp: fp.write(requests.get(play_url).content) print('>>>720P下载完成!!!') except: try: play_url = hash_js['mvdata']['hd']['downurl'] file_suffix = play_url.split('/')[-1].split('.')[-1] if play_url !="": print('540P MV下载地址已找到,请稍候...') with open(save_path_real+mv_title + "." + file_suffix, "wb")as fp: fp.write(requests.get(play_url).content) print('>>>540P下载完成!!!') except: print('>>>无MV!')# 获取htmldef get_html(url): access_url = url # 移除SSL验证时的警告 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) response = requests.get(access_url, headers=headers, verify=False) html = response.text # 获取mv的hash和标题 get_mv_name_hash(html, save_path_real)def main(): # MV页面链接 url = input('>>>请输入酷狗音乐MV播放页URL地址:') get_html(url) continue_download = input('>>>是否继续下载?输入Y or N,其余字符不可用!\n\n') if continue_download == 'Y' or continue_download == 'y': main()# 启动程序if __name__ == '__main__': main()
好了,今天的分享到此就结束了,有想交流的,请记得私信我哦!
代码也可以打包成exe文件,电脑安装python也能下载,我已经打包好了,如果小伙伴有需要的,也记得私信我哦。