爬取酷我音乐,一个歌手所有歌曲(除vip以外)

import json
from tqdm import tqdm
import requests
import jsonpath

artist_name = input("请输入歌手名字:")
url = 'https://wapi.kuwo.cn/api/www/search/searchArtistBykeyWord?key=' + artist_name + '&pn=1&rn=30&httpsStatus=1&reqId=64126310-1a70-11ee-847f-adad9baea72d&plat=web_www&from='
# print(url)
headers = {
    "Cookie": "_ga=GA1.2.2021007609.1602479334; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1602479334,1602673632; _gid=GA1.2.168402150.1602673633; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1602673824; kw_token=5LER5W4ZD1C",
    "csrf": "5LER5W4ZD1C",
    "Referer": "{}",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36",
}
resp = requests.get(url, headers=headers)
# print(resp.text)
artist_dict = json.loads(resp.text)
name_list = artist_dict['data']['list']  # 获取与搜索名字相关的歌手列表
# print(name_list[0]['name'])
# print(name_list)
i = 0
list = []  # 将字符串转换成列表
for item in name_list:
    num = i + 1
    i = num
    # print(num, f"{item['name']}, {item['id']}")
    auther_url = 'http://www.kuwo.cn/search/list?key=' + f"{item['name']}"
    # print(auther_url)
    list.append(auther_url)
# http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key=NINEONE&pn=1&rn=20&httpsStatus=1&reqId=c13577c0-1adf-11ee-ae29-978b59229e55&plat=web_www&from=
# singer_url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key='+f"{name_list[0]['name']}"+'&pn=1&rn=20&httpsStatus=1&reqId=c13577c0-1adf-11ee-ae29-978b59229e55&plat=web_www&from='
# singer_url = 'http://www.kuwo.cn/search/list?key=' + f"{name_list[0]['name']}"
# print(list)
print("歌手名字是:"f"{name_list[0]['name']}")
# print("歌手id是:"f"{name_list[0]['id']}")  # 拼接,默认获取第一个

singer_url = 'http://www.kuwo.cn/api/www/artist/artistMusic?artistid=' + f"{name_list[0]['id']}" + '&pn=1&rn=40&httpsStatus=1&reqId=46102b90-1ba6-11ee-b197-df2d4c451ee7&plat=web_www&from='
# print(singer_url)
headers2 = {
    'Cookie': 'Hm_token=HkH2GRY3xtJHb3DdmxhZtpXhZwmYm33z; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1688482266,1688525741,1688610666; _ga=GA1.2.156249961.1688482266; _gid=GA1.2.625106950.1688482266; _ga_ETPBRPM9ML=GS1.2.1688610668.3.1.1688610977.60.0.0; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1688610977',
    'Cross': 'ba8722ddd95c14df184665f473c3f936',
    'Host': 'www.kuwo.cn',
    'Referer': 'http://www.kuwo.cn/singer_detail/1725804',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0'

}

response = requests.get(singer_url, headers=headers2)  # 获取第一页数据,每页二十一条数据,可以修改singer_url的pn和rn值
response_dict = json.loads(response.text)
singer_list = response_dict['data']['list']
# print(singer_list)   # 输出歌手的歌曲列表
print("即将下载的歌曲列表:")
print("----------------------")
for i in tqdm(singer_list):  # 遍历爬取数据
    rid = f"{i['rid']}"
    sing_name = f"{i['name']}"
    artist = f"{i['artist']}"
    isListenFee = f"{i['isListenFee']}"
    print(sing_name, artist, isListenFee)
print("----------------------")

# print(f"{singer_list[i]['name']}")   #输出列表中第十一个name元素
# print(response)
# print(response['data'])
for i in tqdm(singer_list):  # 遍历爬取数据
    rid = f"{i['rid']}"
    sing_name = f"{i['name']}"
    artist = f"{i['artist']}"
    print("即将下载:------------" + sing_name, artist)
    # print(f"{i['rid']}  {i['name']}  {i['artist']}")  # 遍历访问列表中存在字典
    # sing_url1获取歌词,歌曲封面,热门评论,全部评论
    sing_url1 = 'http://m.kuwo.cn/newh5/singles/songinfoandlrc?musicId=' + rid + '&httpsStatus=1&reqId=898c62d0-1bba-11ee-8a80-5935031587a9&plat=web_www&from='
    # sing_url2获取歌曲下载地址url
    sing_url2 = 'http://www.kuwo.cn/api/v1/www/music/playUrl?mid=' + rid + '&type=music&httpsStatus=1&reqId=318024e0-1bbb-11ee-8a80-5935031587a9&plat=web_www&from='
    resp1 = requests.get(sing_url1)
    # print(resp1)
    resp2_json = json.loads(resp2.content.decode())
    # (resp2_json)
    try:
        music_data = resp2_json['data']['url']  # 获取音乐的二进制文件
        # print(music_data)
        response_data = requests.get(music_data)
        # print(response_data)
        with open('D:\训练\慕思c\\' + sing_name + '.mp3', 'wb') as music:
            print('-----------------正在下载请稍等----------------------')
            music.write(response_data.content)
            music.close()
            print('下载完毕!')
    except:
        print(sing_name + "下载失败")
        # print("失败原因可能是因为是vip音乐")

print("全部下载完成")
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值