Python应⽤爬⾍下载酷狗⾳乐
应⽤爬⾍下载酷狗⾳乐
⾸先我们需要进⼊到这个界⾯
想要爬取这些歌曲链接,然⽽这个是⼀个假的⽹站,虽然单机右键进⾏检查能看到这些歌曲的链接,可进⾏爬取时,却爬取不到这些信息。
这个时候我们就应该换⼀种思路了,点击Network下的JS,如果没有什么信息,可按F5进⾏刷新。之后我们点击如下:
然后我们在点击Preview,可发现:
lists下⾯有我们需要的信息,可以通过这些信息重新组成⼀个⽹址:
www.kugou/song/#hash=(FileHash)&album_id=(AlbumID)
FileHash和AlbumID的值能在lists下⾯到。
完成这个操作,点击进⼊这个组合的⽹址,就可以进⼊到这个界⾯了。
再单击右键进⾏检查,发现这⾥有这⾸歌的下载链接
这个时候再进⾏爬取,发现其他信息都有,唯独没有这个下载链接,点击Network下⾯的JS,刷新发现有⼀个JS⽂件上有这个链接
然后我们只需将这个⽹址进⾏组合即可wwwapi.kugou/yy/index.php?
r=play/getdata&callback=jQuery19104844152583738923_1580266512987&hash=473EE408104AEB6FB21A3518B6B0F0FC&album_id=596052&dfid=2SSV0x4LWcsx0iylej1F6w7P&mid=44328d3d
通过多次组合发现,这个⽹址只需hash、album_id、dfid、mid和platid就可以得到所需要的信息了,且dfif、mid和platid的值是不变的,⽽前⾯的两个变量的值在我说的第四幅图
中可以到。
完成这个之后,点击进⼊,就可以得到想要的信息了。、
代码代码如下:
quest import urlopen
import urllib.parse
import json    # 导⼊json模块,为了使下载的js⽂件更容易得到所需的信息
import time
import sys
import os
# 导⼊sys和time模块是为了显⽰进度条
def Time_1():    #  进度条函数
for i in range(1,51):
sys.stdout.write('\r')
sys.stdout.write('{0}% |{1}'.format(int(i%51)*2,int(i%51)*'■'))
sys.stdout.flush()
time.sleep(0.125)
sys.stdout.write('\n')
def KuGou_music():
keyword=urllib.parse.urlencode({'keyword':input('请输⼊歌名:')})
keyword=keyword[keyword.find('=')+1:]
url='songsearch.kugou/song_search_v2?callback=jQuery1124042761514747027074_15
80194546707&keyword='+keyword+'&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrect    content=urlopen(url=url)
ad().decode('utf-8')
str_1=content[content.find('(')+1:-2]
str_2=json.loads(str_1)
Music_Hash={}
Music_id={}
for dict_1 in str_2['data']['lists']:
Music_Hash[dict_1['FileName']]=dict_1['FileHash']
Music_id[dict_1['FileName']]=dict_1['AlbumID']
# print(dict_1)
list_music_1=[music for music in Music_Hash] # 匹配到的所有歌曲名列表
list_music=[music for music in Music_Hash]
for i in range(len(list_music)):
if '- <em>' in list_music[i]:
python新手代码userid
list_music[i]=list_music[i].replace('- <em>','-')
if '</em>' in list_music[i]:
list_music[i]=list_music[i].replace('</em>','')
if '<em>' in list_music[i]:
list_music[i]=list_music[i].replace('<em>','')
# 使歌曲名称更加美观
# 如: < em > 战狼 < / em > - 断情笔经过这个处理之后战狼 - 断情笔
for i in range(len(list_music)):
print("{}-:{}".format(i+1,list_music[i]))
music_id_1=int(input('请输⼊你想下载的歌曲序号:'))
# 'wwwapi.kugou/yy/index.php?r=play/getdata&hash=E77548A33D7AF84F727C32A786C107D0&album_id=542163&dfid=2SSV0x4LWcsx0iylej1F6w7P&mid=44328d3dc4bfce21cf2b95cf9e76b968&platid=4'
# ⼀个加载js⽂件的标椎式样⽹址
url='wwwapi.kugou/yy/index.php?r=play/getdata&hash='+Music_Hash[list_music_1[music_id_1-1]]+'&album_id='+Music_id[list_music_1[music_id_1-1]]+'&dfid=2SSV0x4LWcsx0iylej1F6w7P&mid=44328d3dc4bfce21c    js_content=urlopen(url=url)
str_3=ad().decode('utf-8')    #所加载的js中的内容
dict_2=json.loads(str_3)  # 将这个js格式转换成为字典格式
try:
music_href=dict_2['data']['play_backup_url']  #下载的歌曲⽹址
music_content=urlopen(url=music_href).read()
try:
os.mkdir('D:\酷狗⾳乐下载')
except Exception as e:
print(e,'但不要紧,程序仍然执⾏')
finally:
music_path='D:\酷狗⾳乐下载\\'+list_music[music_id_1-1]+'.mp3' # 歌曲下载路径
with open(music_path,'wb') as f:
print('正在下载当中...')
f.write(music_content)
Time_1()
print('{}.mp3下载成功!'.format(list_music[music_id_1-1]))
except:
print('对不起,没有该歌曲的版权!')
if __name__=='__main__':
print('------声明:本⼩程序仅供娱乐,切莫⽤于商业活动,⼀经发现,概不负责!-------')
KuGou_music()
运⾏结果:
注意:代码中的那个下载路径必须是已经存在了的,否则会报错。
⼀些歌曲是下载不了的,如你的名字,这个是付费歌曲,这个程序只能下载酷狗⾳乐在⽹页上能播放的。注意:这个代码仅供娱乐和学习,切莫⽤于商业⽬的,⼀经发现,概不负责!