爬虫批量下载酷我音乐(用酷我音乐客户端)

本文介绍了一种使用Python从酷我音乐网站搜索并下载音乐的方法。文章详细解释了如何通过歌手名字搜索歌曲,处理JSON响应数据,以及下载AAC格式的音乐文件。同时,提到了处理网络错误和音乐格式的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x01注意点

标准json字符串用json.loads(result) 转化,里面好多冒号,并且是双引号可以在线简单观察https://www.json.cn/

单引号不是标准json
这决定了处理方式的不同
loads是双引号转字典的方式,eval是单引号的转字典方式

hot_songs = json.loads(result)
songs=eval(music_list)

0x02使用简介

name_list里面填进去歌手名字, download_music函数将会下载音乐。
原理是听的时候获取到的链接,所以音质不是太高。下载的音乐是aac格式音乐播放器即可打开。
会下载到./music/歌手名 目录下

    name_list=["林俊杰"]
    for name in name_list:
        download_music(name)

这个错误是因为网络原因,要么本地网络不通要么ip已经被封了

ConnectionResetError: [Errno 104] Connection reset by peer

0x03代码

# -*- coding:utf-8 -*-

import requests
import time
import urllib
import os
def get(url):
    response=requests.get(url)
    response.encoding=response.apparent_encoding
    return response.text

#通过歌手名字搜索歌单 歌手名字,当前页码(从0开始),rn表示每页展示多少条
def search_by_name(name,pn=0,rn=100):
    url="https://search.kuwo.cn/r.s?pn="+str(pn)+"&rn="+str(rn)+"&all="+name+"&ft=music&newsearch=1&alflac=1&itemset=web_2013&client=kt&cluster=0&vermerge=1&rformat=json&encoding=utf8&show_copyright_off=1&pcmp4=1&ver=mbox&plat=pc&vipver=MUSIC_9.0.2.0_PQ&devid=51016591&newver=1"
    music_list=get(url)
    songs=eval(music_list)['abslist']


    for song in songs:
        #    在网页中表示空格
        song_name=song["SONGNAME"].replace(" "," ")
        song_id=song["MUSICRID"].replace("MUSIC_","")
        yield song_name,song_id


    #单引号不是标准json

    #标准json字符串用json.loads(result) 转化,里面好多:并且是双引号

    # result = music_list
    # hot_songs = json.loads(result)["hotsong"]  # 字符串转字典
    # for hot_song in hot_songs:
    #     song_name = hot_song["name"]
    #     print(song_name)

    yield song_name

#根据歌手名称获取下载地址
def search_by_music(song_id):
    url="http://antiserver.kuwo.cn/anti.s?rid=MUSIC_"+song_id+"&format=aac|mp3&type=convert_url&response=url"
    print(url)
    return get(url)

#根据歌名搜歌词
def search_lirycs_name(song_id):
    url="http://www.kuwo.cn/play_detail/"+song_id
    return get(url)


def download_music(name="林俊杰"):
    path="./music/"+name
    music_names=search_by_name(name)
    for name in music_names:
        os.makedirs(path,exist_ok=True)

        song_url=search_by_music(name[1])

        # song_lirycs=search_lirycs_name(name[1])
        print(name[0],song_url)

        urllib.request.urlretrieve(song_url, path +"/"+ name[0]+".aac")

if __name__=="__name__":
    name_list=["林俊杰"]
    for name in name_list:
        download_music(name)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值