没事爬点歌来听听,不管收费免费大小通吃,直接上代码,爬取思路在源码注释中
import requests
import random
import json
import time
starturl = 'https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg?picmid=1&rnd={0}&g_tk=5381&jsonpCallback=getPlaylist&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&categoryId=10000000&sortId=5&sin={1}&ein={2}'
rnd = random.random()
sin = 0
ein = 29
'''
一.请求歌单首页,获取所有歌单信息 dissid
'''
while True:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
headers['referer'] = 'https://y.qq.com/portal/playlist.html'
disslist = requests.get(starturl.format(rnd, sin, ein),headers = headers).text
disslist = json.loads(disslist.strip('getPlaylist()'))
# print(disslist)
for i in disslist['data']['list']:
dissid = i['dissid']
dissName = i['dissname']
# print(dissidlist)
'''
二.通过dissid获取 songmid strMediaMid
'''
dissurl = 'https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&disstid={0}&format=jsonp&g_tk=5381&jsonpCallback=playlistinfoCallback&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0'
headers['referer'] = 'https://y.qq.com/n/yqq/playsquare/{0}.html'.format(dissid)
song = requests.get(dissurl.format(dissid), headers = headers).text
song = json.loads(song.strip('playlistinfoCallback()'))
num = 1
for s in song['cdlist'][0]['songlist']:
# 获取songmid
songmid = s['songmid']
# 获取歌曲名
songName = s['songname']
# 获取strMediaMid
strMediaMid = s['strMediaMid']
#filename
filename = 'C400' + str(s['strMediaMid']) + '.m4a'
'''
三.获取vkey
'''
vkeyurl = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&jsonpCallback=MusicJsonCallback&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback&uin=0&songmid={0}&filename={1}&guid=7670101313'
#发送请求
headers['referer'] = 'https://y.qq.com/portal/player.html'
responses = requests.get(vkeyurl.format(songmid, filename), headers= headers).text
responses = json.loads(responses.strip('MusicJsonCallback()'))
# print(responses)
# 提取vkey
for vk in responses['data']['items']:
vkey = vk['vkey']
'''
四.通过vkey爬取音乐
'''
musicurl = 'http://dl.stream.qqmusic.qq.com/{0}?vkey={1}&guid=7670101313&uin=0&fromtag=66'
del headers['referer']
result = requests.get(musicurl.format(filename, vkey),headers = headers, stream = True).raw.read()
with open('music/'+songName+'.mp3', 'wb') as file:
file.write(result)
# time.sleep(0.1)
print('{0}歌单的第{1}歌-歌曲名称:{2}'.format(dissName, num, songName))
num += 1
if sin < disslist['data']['sum']:
sin+=30
ein+=30
rnd = random.random()
time.sleep(1)
else:
break