import requests
import time
import sys
from urllib.parse import quote
class KwSpider():
def __init__(self, url):
self.headers = {
'Accept':'application/json, text/plain, */*',
'Accept-Encoding':'gzip, deflate, br, zstd',
'Accept-Language':'zh-CN,zh;q=0.9',
'Host':'www.kuwo.cn',
'Secret': '7767f1d5564331429b4492e319c3d76858a7b9b202b1ce697bb515abf6ff24ed03688d88',
'Cookie': '_ga=GA1.2.84906351.1713248705; _gid=GA1.2.2076295143.1713248705; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1713248705; _gat=1; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1713414875; _ga_ETPBRPM9ML=GS1.2.1713414723.8.1.1713414875.52.0.0; Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324=T7zwGdYiEa2rRyfEPhHe5KRnr5n2pyAa',
'Referer':'https://www.kuwo.cn/',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
}
self.url = url
self.json_data = requests.get(url=self.url, headers=self.headers).json()
if __name__ == "__main__":
singer_name = input('请输入你要下载歌曲的歌手名:')
new_singer_name = quote(singer_name.encode(sys.stdin.encoding).decode(sys.stdin.encoding).encode('utf8'))
url = f'http://www.kuwo.cn/search/searchMusicBykeyWord?vipver=1&client=kt&ft=music&cluster=0&strategy=2012&encoding=utf8&rformat=json&mobi=1&issubtitle=1&show_copyright_off=1&pn=0&rn=20&all={new_singer_name}'
kw = KwSpider(url)
for i in range(20):
music_name = kw.json_data['abslist'][i]['NAME']
singer = kw.json_data['abslist'][i]['FARTIST']
album = kw.json_data['abslist'][i]['ALBUM']
music_id = kw.json_data['abslist'][i]['DC_TARGETID']
mid_url = f'https://www.kuwo.cn/api/v1/www/music/playUrl?mid={music_id}&type=music&httpsStatus=1&reqId=c723ddd1-fc6f-11ee-8c79-3f05cb6296ba&plat=web_www&from='
detail_response = requests.get(url=mid_url, headers=kw.headers)
detail_response_json = detail_response.json()
if detail_response_json.get('data',''):
detail_download_url = detail_response_json.get('data','')['url']
if detail_download_url.split('kw-www/')[0].startswith('app'):
continue
else:
print('序号:'+str(i+1)+'歌曲名:'+music_name+'------------'+'歌手:'+singer+'------------'+'专辑名:'+album+'------------'+'链接:'+detail_download_url)
time.sleep(2)
else:
continue
while True:
input_i = eval(input('请输入你想下载的歌曲序号(-1退出):'))
if input_i == -1:
break
music_id = kw.json_data['abslist'][input_i - 1]['DC_TARGETID']
music_name = kw.json_data['abslist'][input_i - 1]['NAME']
mid_url = f'https://www.kuwo.cn/api/v1/www/music/playUrl?mid={music_id}&type=music&httpsStatus=1&reqId=c723ddd1-fc6f-11ee-8c79-3f05cb6296ba&plat=web_www&from='
detail_response = requests.get(url=mid_url, headers=kw.headers)
detail_response_json = detail_response.json()
detail_download_url = detail_response_json['data']['url']
if detail_download_url:
detail_download_music_data = requests.get(detail_download_url).content
with open(f'kwmusic/{music_name}.mp3', mode='wb') as f:
f.write(detail_download_music_data)
print(f'爬取成功:{music_name}')
```
```