python批量下载音乐

import requests
import time
import re
import os

class MUSIC:
    def __init__(self):
        self.header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleW"
                                    "ebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"}
        self.song_list = []
        self.song_number = 0
        self.sing_name = ""

    def search_music(self, singer_name):
        """搜索歌手名字
           获取该歌手所有歌曲id
        """
        url = "http://music.baidu.com/search"
        self.sing_name = singer_name
        param = {"key": singer_name}
        response = requests.get(url, params=param, headers=self.header)
        response.encoding = "utf-8"
        html = response.text
        # 先找到该歌手的歌曲总数
        number = re.findall(r'<span class="number">(\d+)</span>', html)
        song_number = number[0]
        print("已找到歌手%s的歌曲%s首" % (singer_name,song_number))
        song_number = int(song_number)
        self.song_number = song_number
        song_list =[]
        for i in range(song_number//20 + 1):
            param = {
                "s": 1,
                "key": singer_name,
                "jump": 0,
                "start": i*20,
                "size": i*20+20,
                "third_type": 0,
            }
            response = requests.get(url, params=param, headers=self.header)
            response.encoding = "utf-8"
            html = response.text
            song_id = re.findall(r'sid":(\d+)', html)
            song_list += song_id
            time.sleep(1)
        self.song_list = song_list

    def download_music(self, path):
        """下载音乐"""
        url = "http://play.baidu.com/data/music/songlink"
        data = {
            "songIds": ','.join(self.song_list),
            "hq": 0,
            "type": "mp3",
            "pt": 0,
            "flag": -1,
            "s2p": -1,
            "prerate": -1,
            "bwt": -1,
            "dur": -1,
            "bat": -1,
            "bp": -1,
            "pos": -1,
            "auto": -1,
        }
        response = requests.post(url,data=data,headers=self.header)
        song_info = response.json()
        song_info = song_info["data"]["songList"]
        i = 0
        path = path + "\\" + self.sing_name
        self.mkdir(path)
        for song in song_info:
            song_name = song['songName']
            i +=1
            with open(path + "\\"+ '%s.mp3' % song_name,'wb') as f:
                # 下载mp3文件
                response = requests.get(song['songLink'], headers=self.header)
                f.write(response.content)
                print("已下载%s %d/%d" %(song_name,i,self.song_number))
                time.sleep(1)

    def mkdir(self, path):
        """判断路径是否存在,如果不存在,创建路径"""
        path = path.strip()
        path = path.rstrip("\\")
        isExists = os.path.exists(path)
        if not isExists:
            # 如果不存在路径,创建路径
            os.makedirs(path)


if __name__ == '__main__':
    # 指定下载路径
    path = "D:\\python学习\\百度音乐爬虫"
    singer_name = input("请输入要下载歌曲的歌手名字:")
    music = MUSIC()
    music.search_music(singer_name)
    music.download_music(path)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值