熊猫DJ音乐用-Python下载本地-免费听

安装 requests 模块
python -m pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

安装 进度条 tqdm 模块

python -m pip install tqdm -i https://pypi.tuna.tsinghua.edu.cn/simple

导入模块

# 导入正则表达式模块,用于字符串的模式匹配和搜索  
import re  
  
# 导入requests库,这是一个非常流行的HTTP客户端库,用于发送HTTP请求(如GET、POST等)  
import requests  
  
# 导入tqdm库,这个库主要用于快速创建进度条,特别是在处理大量数据或迭代时  
from tqdm import tqdm  
  
# 导入os模块,这是Python的标准库之一,提供了与操作系统交互的功能,如文件操作、环境变量访问等  
import os

解析数据

def download_music(music_path, page):
    # 构造音乐列表页的URL,其中page为页面号
    url = f"https://www.djcscs.com/index.php?ac=ajax_musicAjaxPage&scene_id=0&genre_id=0&lang_id=281&age_id=0&classid=0&feeling_id=0&subject_id=0&vip=0&page={page}"

    # 发送POST请求获取音乐列表
    res = requests.post(url)

    # 从响应的文本中提取所有音乐的ID
    musicid = re.findall('MusicId MusicId-(.*?)"', res.text)

    # 设置cookies,这通常用于保持会话状态
    cookies = {
        'PHPSESSID': '61nkur5b13vkvj8b2o5r0hsnj1',
        'Hm_lvt_79e32657a6675f0e9b46c23a8bce03f3': '1713261984',
        'adminUrl': 'https%3A%2F%2Fwww.djcscs.com%2Findex.php%3Fac%3Dmusic_index',
        'Hm_lpvt_79e32657a6675f0e9b46c23a8bce03f3': '1713262874',
    }

    # 设置请求头,用于模拟浏览器行为
    headers = {
        'Referer': 'https://www.djcscs.com/',
        '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 Edg/123.0.0.0'
    }

    # 设置请求参数,这些参数通常用于告诉服务器我们要执行的操作
    params = {
        'ac': 'music_getMusic',
    }

    # 遍历所有提取到的音乐ID
    for cid in musicid:
        data = {
            'id': cid,  # 构造要请求的音乐的ID
        }

        # 发送POST请求获取音乐信息
        response = requests.post('https://www.djcscs.com/index.php', params=params, cookies=cookies, headers=headers, data=data)

下载获取数据

        # 在获取音乐信息之后,执行以下操作来下载音乐文件
        if response.status_code == 200 and 'data' in response.json() and 'title' in response.json()['data'] and 'mp3' in response.json()['data']:
            # 提取音乐标题
            title = response.json()['data']['title']

            # 清理标题中的非法字符,生成合法的文件名
            audio_name = re.sub(r'[^\w\s.-]', '', title)

            # 提取音乐的mp3链接
            mp3_url = response.json()['data']['mp3']

            # 使用HEAD请求获取音乐文件的大小(以字节为单位)
            # 注意:不是所有服务器都支持HEAD请求或提供Content-Length头部
            response_size = int(requests.head(mp3_url).headers.get('content-length', 0))

            # 使用tqdm库创建一个进度条对象
            # total: 总大小(以字节为单位)
            # desc: 进度条的描述信息
            # unit: 进度条显示的单位,'B' 表示字节
            # unit_scale: 是否使用KB, MB等单位自动缩放
            # unit_divisor: 单位缩放的除数
            with tqdm(total=response_size, desc=f"正在下载---> {audio_name}.mp3", unit='B', unit_scale=True, unit_divisor=1024) as pbar:
                # 发起GET请求,使用stream=True参数来流式传输数据
                with requests.get(mp3_url, stream=True) as r:
                    # 确保请求成功
                    if r.status_code == 200:
                        # 以二进制写入模式打开文件
                        with open(f'{music_path}/{audio_name}.mp3', 'wb') as f:
                            # 迭代地读取响应内容,每次读取一个块
                            for chunk in r.iter_content(chunk_size=1024):
                                if chunk:  # 确保块不为空
                                    # 将块写入文件
                                    f.write(chunk)
                                    # 更新进度条  
                                    pbar.update(len(chunk))
                    else:
                        print(f"下载失败,状态码:{r.status_code}")

调用函数

# 定义一个主函数,用于执行整个下载流程
def main():
    # 设置音乐文件将要保存的路径
    music_path = 'D:/音乐/熊猫DJ音乐'
    # 使用os.makedirs创建目录,如果目录已存在则不会报错(exist_ok=True)
    os.makedirs(music_path, exist_ok=True)

    # 假设每页有音乐可以下载,循环从第1页到第10页
    for page in range(1, 11):
        # 调用download_music函数,传入保存路径和当前页码作为参数  
        # 这里假设download_music函数会处理每页音乐的下载
        download_music(music_path, page)


# 当这个脚本作为主程序运行时,执行main函数
if __name__ == "__main__":
    main()

完整代码

# 导入正则表达式模块,用于字符串的模式匹配和搜索
import re

# 导入requests库,这是一个非常流行的HTTP客户端库,用于发送HTTP请求(如GET、POST等)
import requests

# 导入tqdm库,这个库主要用于快速创建进度条,特别是在处理大量数据或迭代时
from tqdm import tqdm

# 导入os模块,这是Python的标准库之一,提供了与操作系统交互的功能,如文件操作、环境变量访问等
import os


def download_music(music_path, page):
    # 构造音乐列表页的URL,其中page为页面号
    url = f"https://www.djcscs.com/index.php?ac=ajax_musicAjaxPage&scene_id=0&genre_id=0&lang_id=281&age_id=0&classid=0&feeling_id=0&subject_id=0&vip=0&page={page}"

    # 发送POST请求获取音乐列表
    res = requests.post(url)

    # 从响应的文本中提取所有音乐的ID
    musicid = re.findall('MusicId MusicId-(.*?)"', res.text)

    # 设置cookies,这通常用于保持会话状态
    cookies = {
        'PHPSESSID': '61nkur5b13vkvj8b2o5r0hsnj1',
        'Hm_lvt_79e32657a6675f0e9b46c23a8bce03f3': '1713261984',
        'adminUrl': 'https%3A%2F%2Fwww.djcscs.com%2Findex.php%3Fac%3Dmusic_index',
        'Hm_lpvt_79e32657a6675f0e9b46c23a8bce03f3': '1713262874',
    }

    # 设置请求头,用于模拟浏览器行为
    headers = {
        'Referer': 'https://www.djcscs.com/',
        '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 Edg/123.0.0.0'
    }

    # 设置请求参数,这些参数通常用于告诉服务器我们要执行的操作
    params = {
        'ac': 'music_getMusic',
    }

    # 遍历所有提取到的音乐ID
    for cid in musicid:
        data = {
            'id': cid,  # 构造要请求的音乐的ID
        }

        # 发送POST请求获取音乐信息
        response = requests.post('https://www.djcscs.com/index.php', params=params, cookies=cookies, headers=headers, data=data)

        # 在获取音乐信息之后,执行以下操作来下载音乐文件
        if response.status_code == 200 and 'data' in response.json() and 'title' in response.json()['data'] and 'mp3' in response.json()['data']:
            # 提取音乐标题
            title = response.json()['data']['title']

            # 清理标题中的非法字符,生成合法的文件名
            audio_name = re.sub(r'[^\w\s.-]', '', title)

            # 提取音乐的mp3链接
            mp3_url = response.json()['data']['mp3']

            # 使用HEAD请求获取音乐文件的大小(以字节为单位)
            # 注意:不是所有服务器都支持HEAD请求或提供Content-Length头部
            response_size = int(requests.head(mp3_url).headers.get('content-length', 0))

            # 使用tqdm库创建一个进度条对象
            # total: 总大小(以字节为单位)
            # desc: 进度条的描述信息
            # unit: 进度条显示的单位,'B' 表示字节
            # unit_scale: 是否使用KB, MB等单位自动缩放
            # unit_divisor: 单位缩放的除数
            with tqdm(total=response_size, desc=f"正在下载---> {audio_name}.mp3", unit='B', unit_scale=True, unit_divisor=1024) as pbar:
                # 发起GET请求,使用stream=True参数来流式传输数据
                with requests.get(mp3_url, stream=True) as r:
                    # 确保请求成功
                    if r.status_code == 200:
                        # 以二进制写入模式打开文件
                        with open(f'{music_path}/{audio_name}.mp3', 'wb') as f:
                            # 迭代地读取响应内容,每次读取一个块
                            for chunk in r.iter_content(chunk_size=1024):
                                if chunk:  # 确保块不为空
                                    # 将块写入文件
                                    f.write(chunk)
                                    # 更新进度条
                                    pbar.update(len(chunk))
                    else:
                        print(f"下载失败,状态码:{r.status_code}")


# 定义一个主函数,用于执行整个下载流程
def main():
    # 设置音乐文件将要保存的路径
    music_path = 'D:/音乐/熊猫DJ音乐'
    # 使用os.makedirs创建目录,如果目录已存在则不会报错(exist_ok=True)
    os.makedirs(music_path, exist_ok=True)

    # 假设每页有音乐可以下载,循环从第1页到第10页
    for page in range(1, 11):
        # 调用download_music函数,传入保存路径和当前页码作为参数
        # 这里假设download_music函数会处理每页音乐的下载
        download_music(music_path, page)


# 当这个脚本作为主程序运行时,执行main函数
if __name__ == "__main__":
    main()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值