admin管理员组

文章数量:1583591

Pyhton酷我音乐爬取MP3文件案例

一、数据爬取思路分析

找到数据来源,通过浏览器抓包工具

通过网络标签和关键字搜索

查看网页源代码,找到数据位置

确定实现思路和技术实现方式

二、代码实现

发送请求

获取数据

解析数据

保存数据

使用会员登录可下载所有列表歌曲,非会员只能下载免费的MP3歌曲
支持分页下载,下载所有分页列表歌曲

关注微信公众号【站在前沿】,回复kuwo,获取完整代码下载地址

kuwo.py

def downMp3s(musicIds, musicNames):
    for musicId, musicName in zip(musicIds, musicNames):
        url = f'http://www.kuwo/api/v1/www/music/playUrl?mid={musicId}&type=music&httpsStatus=1&reqId=7e2a25c3-51e3-11ee-b0bd-49dd3fc18b18&plat=web_www&from='
        # logging.debug(until.getResJson(url=url, headers=headers))
        code = until.getResJson(url=url, headers=headers)['code']
        if code == 200:
            downUrl = until.getResJson(url=url, headers=headers)['data']['url']
            # logging.debug(downUrl)
            until.downBinFile(downUrl, '', 'mp3', musicName + '.mp3')
            logging.info('歌曲:' + musicName + '.mp3 下载完成')
        elif code == -1:
            logging.info('歌曲:' + musicName + '为付费内容,无法下载')
        else:
            logging.info('歌曲:' + musicName + '下载时返回Code为' + code)


if __name__ == '__main__':
    urlMp3List = 'http://www.kuwo/api/www/bang/bang/musicList'
    params = {
        "bangId": "93",
        "pn": "1",
        "rn": "20",
        "httpsStatus": "1",
        "reqId": "787a5650-51e8-11ee-adef-53b278c91f8b",
        "plat": "web_www",
        "from": ""
    }
    for pn in range(1, 16):
        params['pn'] = str(pn)
        mp3List = until.getResJson3(urlMp3List, headers, params)
        # pprint.pprint(mp3List)
        musicIds = []
        musicNames = []
        for i in range(0, 20):
            musicIds.append(mp3List['data']['musicList'][i]['rid'])
            musicNames.append(mp3List['data']['musicList'][i]['name'])
        # logging.debug(musicIds)
        # logging.debug(musicNames)
        # 开始下载当前页的歌曲列表
        downMp3s(musicIds, musicNames)
        logging.info('===============第' + str(pn) + '页下载完成=================')

关注微信公众号【站在前沿】,回复kuwo,获取完整代码下载地址 

本文标签: 爬虫核心代码文件音乐