话不多说直接上代码
import re
import requests
def requests_dataFromSmarty(url, headers):
response = requests.get(url, headers)
res_text = response.content.decode()
# print(response.content.decode())
re_dataFromSmarty = re.findall(
'"hash":"(?P<hash>.*?)","timelength":(?P<timelength>.*?),"audio_name":"(?P<audio_name>.*?)","author_name":"(?P<author_name>.*?)","song_name":"(?P<song_name>.*?)","album_id":(?P<album_id>.*?),"encode_album_id":"(?P<encode_album_id>.*?)","mixsongid":(?P<album_audio_id>.*?),"is_risk":(?P<is_risk>.*?)',
res_text, re.S)
# print(re_dataFromSmarty[0][0])
return re_dataFromSmarty
# 获取歌曲链接
def music_url(re_dataFromSmarty, headers):
url_2 = f"https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery1910599660947823377_1666248458566&hash={re_dataFromSmarty[0][0]}&dfid=3x7jcE2igcjq3XwZYl2Yr52L&appid=1014&mid=8448c068f4a169a9ee628eee11c6344d&platid=4&album_id={re_dataFromSmarty[0][-4]}&album_audio_id={re_dataFromSmarty[0][-2]}&_=1666248458569"
response = requests.get(url_2, headers)
text=response.content.decode('utf-8')
# print(text,type(text))
re_music_url=re.findall('"play_url":"(.*?)"',text)[0]
# print(re_music_url)
re_music_url=re_music_url.replace('\\/','/')
print(re_music_url,type(re_music_url))
return re_music_url
# 保存模块
def save(re_music_url,name,headers):
# print(re_music_url, type(re_music_url))
response=requests.get(re_music_url,headers=headers)
with open(f'{name}.mp3','wb') as f:
f.write(response.content)
def main():
# 可以通过更换链接来获取不同榜单的音乐
# top500
# url = 'https://www.kugou.com/yy/rank/home/1-8888.html?from=rank'
# 飙升榜
url = 'https://www.kugou.com/yy/html/rank.html'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)
# print(response.content.decode())
text = response.content.decode()
re_text = re.finditer(
'<span class="pc_temp_num">.*?<a \s*?href="(?P<url_1>.*?)"\s*?data-active="playDwn" data-index="(?P<index_1>.*?)" class="pc_temp_songname"\s*?title="(?P<title_1>.*?)"\s*?hidefocus="true"\s*?>',
text, re.S)
a = 1
for i in re_text:
# 获取信息
url_1 = i.groupdict()['url_1']
# print(url_1)
# print(i.groupdict()['title_1'])
name=i.groupdict()['title_1']
re_dataFromSmarty = requests_dataFromSmarty(url_1, headers)
# print(re_dataFromSmarty)
# 获取歌曲链接
re_music_url=music_url(re_dataFromSmarty, headers)
save(re_music_url,name,headers)
if __name__=='__main__':
main()