酷我音乐爬取下载
import os
import re
import PySimpleGUI as sg
import jsonpath
import requests
# 保存这次访问的cookies
html=requests.session()
keys=[]
save_path=None
def get_music_url(music_name):
url='https://kuwo.cn/'
html.get(url)
csrf=html.cookies.get_dict()['kw_token']
# print(csrf)
url=f'https://kuwo.cn/api/www/search/searchMusicBykeyWord?key={music_name}&pn=1&rn=30&httpsStatus=1'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
'Accept': 'application/json, text/plain, */*',
'csrf': csrf,
'Referer': 'https://kuwo.cn',
}
json_data=html.get(url,headers=headers).json()
name_list=jsonpath.jsonpath(json_data,'$..name')
artist_list=jsonpath.jsonpath(json_data,'$..artist')
rid_list=jsonpath.jsonpath(json_data,'$..rid') # 查找所有键为rid的值
length=len(rid_list)
# print('歌曲数量:',length)
data=[]
keys.append(music_name)
for i in range(length):
music_json = f'https://kuwo.cn/api/v1/www/music/playUrl?mid={rid_list[i]}&type=convert_url3&br=320kmp3'
resp = html.get(url=music_json)
if resp.status_code <span style="font-weight: bold;" class="mark"> 200:
if resp.json()['code'] </span> 200:
mp3_url = resp.json()['data']['url']
title=re.sub(' ', " ", name_list[i])
artist=re.sub(' ', " ", artist_list[i])
data.append([title, artist, rid_list[i]])
print(title, artist, rid_list[i], sep=' | ')
# 传入到歌曲选择框选择
window["value"].Update(values=data, font=("微软雅黑", 10), size=(30, 8))
window["keys"].Update(values=keys, font=("微软雅黑", 10),size=(70, 8))
def save_music(file_path, mp3data):
music_json = f'https://kuwo.cn/api/v1/www/music/playUrl?mid={mp3data[2]}&type=convert_url3&br=320kmp3'
mp3_url = html.get(url=music_json).json()['data']['url']
resp = requests.get(url=mp3_url)
if not os.path.exists(file_path):
os.makedirs(file_path)
with open(f'{file_path}/{mp3data[0]}-{mp3data[1]}.mp3', mode='wb') as f:
f.write(resp.content)
# 主题设置
sg.theme('BrownBlue') # BrownBlue LightBrown3
# 布局设置
layout = [ # 搜索框布局 Text:文本 Combo:输入框 tooltip:鼠标移动到输入框显示的内容 size:输入框宽度 Button:按钮 key:唯一标识
[sg.Text('请输入搜索的歌曲或歌手:', font=("微软雅黑", 12)),
sg.Combo(values='', tooltip='请输入搜索的歌曲或歌手:', font=("微软雅黑", 10), default_value='', auto_size_text=True,
size=(70, 0), key='keys'), sg.Button('搜索', font=("微软雅黑", 12))],
# 歌曲选择框布局
[sg.Text('请选择或输入要保存的歌:', font=("微软雅黑", 12)),
sg.Combo(values='', tooltip='请选择或输入要保存的歌:', font=("微软雅黑", 10), default_value='', auto_size_text=True,
size=(70, 0), key='value'), sg.Button('保存', font=("微软雅黑", 12))],
# 信息展示框 Output:输出元素
[sg.Text('信息展示:', justification='center')],
# 将print输出展示到gui界面信息框 echo_stdout_stderr=True同时显示在控制台
[sg.Output(size=(100, 10), font=("微软雅黑", 10))],
# 退出程序按钮
[sg.Text('', font=("微软雅黑", 12), size=(73, 1)),sg.Button('退出程序', font=("微软雅黑", 12))]
]
# 创建窗口
window = sg.Window('酷我音乐下载器', layout, font=("微软雅黑", 12), default_element_size=(80, 1))
# 事件循环 类似网页后端代码
while True:
event, values = window.read()
if event == '搜索':
if values['keys']:
# 接收搜索框内容
key = values['keys']
# 传入函数
url_rid = get_music_url(music_name=key)
# MP3url_rid(url_rid)
print('搜索完成, 请选择要下载的歌曲!')
# 弹窗
sg.popup('搜索完成, 请选择要下载的歌曲!')
else:
print('歌曲或歌手未输入!')
sg.popup('歌曲或歌手未输入!')
if event == '保存':
if values['value']:
# sg.popup_get_folder() 弹窗的一种,接收的是文件路径
try:
if save_path != None:
save_path = sg.popup_get_folder('请选择存储路径:',default_path=save_path)
else:
save_path = sg.popup_get_folder('请选择存储路径:')
if save_path !=None:
mp3data = values['value']
save_music(save_path, mp3data)
print(f'{mp3data[0]}-{mp3data[1]} 下载完成!')
# sg.popup('下载完成!')
except:
print('出现异常,下载失败')
else:
print('未选择或者输入歌曲!')
sg.popup('未选择或者输入歌曲!')
# 点击退出程序按时结束事件循环
if event in (None, '退出程序'):
break
window.close()
import os
import re
import requests
import prettytable
from prettytable import DEFAULT
def get_music():
input_name = input("请输入你要下载的歌曲或歌手:")
url = 'https://kuwo.cn/'
# 保存这次访问的cookies
html = requests.session()
html.get(url)
csrf=html.cookies.get_dict()['kw_token']
# print(csrf)
url=f'https://kuwo.cn/api/www/search/searchMusicBykeyWord?key={input_name}&pn=1&rn=30&httpsStatus=1'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
'Accept': 'application/json, text/plain, */*',
'csrf': csrf,
'Referer': 'https://kuwo.cn',
}
music_list=html.get(url,headers=headers).json()["data"]["list"]
music_tab = prettytable.PrettyTable(align='l')
music_tab.field_names = ["序号", f'{"歌曲":\u3000<20}', "歌手".ljust(6,' ')]
num = 0
music_rid_list = []
for music in music_list:
music_rid = music["rid"]
music_name = music["name"]
music_name=re.sub(' ', "", music_name).strip()
if len(music_name)>25:
music_name += 6*' '
music_artist = music["artist"].strip()
music_rid_list.append([music_rid, music_name, music_artist])
music_tab.add_row([num, f'{music_name:\u3000<23}', music_artist])
num += 1
# MSWORD_FRIENDLY,PLAIN_COLUMNS,DEFAULT 三种表格样式
music_tab.set_style(DEFAULT)
print(music_tab)
return music_rid_list
music_rid_list=get_music()
while True:
try:
print('[输入66]回到上一级 | [输入88]退出程序')
music_tab_index = int(input("请输入你想下载的歌曲序号:"))
if music_tab_index == 66:
music_rid_list = get_music()
continue
if music_tab_index == 88:
print("bye!")
break
music_name=music_rid_list[music_tab_index][1]
music_artist=music_rid_list[music_tab_index][2]
rid = music_rid_list[music_tab_index][0]
#当下面链接type为 convert_url3 时,免费/付费音乐都可以爬取
# https://kuwo.cn/api/v1/www/music/playUrl?mid=78932517&type=music&httpsStatus=1
# br为音质,可选 128kmp3、192kmp3 和 320kmp3
music_url = f'http://www.kuwo.cn/api/v1/www/music/playUrl?mid={rid}&type=convert_url3&br=320kmp3'
download_url = requests.get(music_url).json()["data"]["url"]
music = requests.get(download_url).content
if not os.path.exists("./下载音乐"):
os.makedirs("./下载音乐")
with open(f'./下载音乐/{music_name}-{music_artist}.mp3', mode="wb") as f:
f.write(music)
print(f"{music_name}-{music_artist},下载成功!")
except:
print('下载异常,请检查输入是否正确')
© 版权声明
- 本站永久网址:https://blog.ksmlc.cn/
- 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责
- 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新
- 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长QQ:2760460838进行删除处理
THE END
暂无评论内容