跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python 实现音乐数据自动化采集与代理方案

针对音乐平台反爬限制,本文介绍了使用 Python 结合代理 API 进行数据采集的方案。通过配置住宅 IP 模拟真实访问,解决了网络异常和验证问题。教程涵盖从环境搭建到代码实现的完整流程,包括请求头设置、数据解析及 Excel 存储,并提供了异常处理机制。最终实现了稳定高效的每日推荐歌单存档,适用于各类需要规避 IP 限制的爬虫场景。

月亮邮递员发布于 2026/2/20更新于 2026/8/1738 浏览
Python 实现音乐数据自动化采集与代理方案

Python 实现音乐数据自动化采集与代理方案

一、背景与挑战

最近想做一个每日推荐歌单存档小工具,每天自动获取推荐歌曲并保存为 Excel。但在实际开发中发现,直接访问目标接口很容易触发反爬机制:刷新几次就会遇到验证,导致无法获取数据。

尝试过免费代理池,但失效快且速度慢,成功率低;手动切换热点又违背了自动化的初衷。最终通过引入第三方代理 API 服务,利用住宅 IP 模拟正常用户访问,成功解决了网络异常和拦截问题。

二、技术选型思路

选择代理方案主要考虑以下三点:

  1. 地域覆盖:部分业务需要特定地区的数据,支持多国家/地区的代理资源能确保获取到本地化内容。
  2. 自动轮转:配置失效自动切换策略,避免频繁手动干预,保证长时间运行的稳定性。
  3. 场景适配:针对特定业务(如音乐平台)选择合适的代理池,能有效降低被识别为爬虫的概率。

三、完整实现流程

很多开发者担心代理配置复杂,其实只要掌握核心步骤,几分钟即可搞定。以下是从环境准备到代码落地的完整过程。

1. 获取代理凭证

在服务商后台完成注册后,进入用户中心获取 API 密钥或连接地址。建议先进行身份验证以解锁更高并发权限。根据需求选择动态或静态住宅 IP 套餐,按流量计费通常更灵活。

2. 配置白名单

生成代理链接前,需将运行设备的公网 IP 添加到白名单中。注意不要填写局域网 IP(如 192.168.x.x),否则会导致连接失败。可通过搜索引擎查询当前公网 IP 进行配置。

3. 代码实现

下面是一个完整的 Python 脚本示例,整合了请求发送、数据解析及文件存储功能。

依赖安装
# 需要安装 requests, openpyxl 等库
import requests
import json
from openpyxl import Workbook
from datetime import datetime
import time
import os
主逻辑函数
def get_music_recommendations_with_proxy():
    # 替换为实际的代理 API 连接地址
    proxy_api_url = "这里填写获取的 API 专属连接"
    
    print("正在获取代理资源...")
    try:
        response = requests.get(proxy_api_url, timeout=10)
        if response.status_code == 200:
            ip_list = response.text.strip().split('\n')
            if ip_list and ip_list[0].strip():
                proxy_ip = ip_list[0].strip()
                print(f"成功获取代理 IP: {proxy_ip}")
            else:
                print("返回的列表为空")
                return None
        else:
            print(f"获取失败,状态码:{response.status_code}")
            return None
    except Exception as e:
        print(f"连接代理 API 失败:{e}")
        return None

    # 设置代理参数
    proxies = {
        'http': f'http://{proxy_ip}',
        'https': f'http://{proxy_ip}'
    }

    # 音乐 API 配置
    netease_url = 'https://music.163.com/api/v3/discovery/recommend/songs'
    
    # 请求头配置,模拟浏览器行为
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        'Referer': 'https://music.163.com/',
        'Origin': 'https://music.163.com',
        'Accept': 'application/json, text/plain, */*',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Cookie': '您的 Cookie 信息...'
    }

    # 初始化 Excel 工作簿
    wb = Workbook()
    ws = wb.active
    ws.title = "每日推荐歌曲"
    ws.append(['序号', '歌曲名称', '歌手', '专辑', '歌曲 ID', '时长', '播放链接'])

    # 发送请求与处理数据
    try:
        response = requests.get(netease_url, headers=headers, proxies=proxies, timeout=15)
        print(f"响应状态码:{response.status_code}")
        
        if response.status_code == 200:
            data = response.json()
            code = data.get('code')
            print(f"业务返回代码:{code}")
            
            if code == 200:
                songs = data['data']['dailySongs']
                print(f"成功获取到 {len(songs)} 首每日推荐歌曲")
                
                for index, song in enumerate(songs, 1):
                    song_name = song['name']
                    artists = "、".join([artist['name'] for artist in song['ar']])
                    album = song['al']['name']
                    song_id = song['id']
                    duration_ms = song['dt']
                    duration = f"{duration_ms // 60000}:{str(duration_ms % 60000 // 1000).zfill(2)}"
                    play_url = f"https://music.163.com/song?id={song_id}"
                    
                    # 控制台输出
                    print(f"{index:2d}. {song_name} - {artists}")
                    # 写入 Excel
                    ws.append([index, song_name, artists, album, song_id, duration, play_url])
                
                # 保存到桌面
                desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
                if not os.path.exists(desktop_path):
                    desktop_path = os.path.expanduser("~")
                    
                timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
                filename = f'每日推荐_{timestamp}.xlsx'
                file_path = os.path.join(desktop_path, filename)
                
                wb.save(file_path)
                print(f"数据已保存到:{file_path}")
                print("任务完成!")
                return True
            else:
                print(f"业务接口返回错误:{code}")
                return False
    except requests.exceptions.ProxyError as e:
        print(f"连接失败:{e}")
        return False
    except requests.exceptions.Timeout:
        print("请求超时,响应过慢")
        return False
    except requests.exceptions.ConnectionError as e:
        print(f"连接错误:{e}")
        return False
    except json.JSONDecodeError as e:
        print(f"JSON 解析错误:{e}")
        return False
    except Exception as e:
        print(f"未知错误:{e}")
        return False

if __name__ == "__main__":
    print("=" * 60)
    print("音乐每日推荐歌曲提取程序")
    print("=" * 60)
    success = get_music_recommendations_with_proxy()
    if not success:
        print("\n任务失败,请检查网络或服务状态")

四、应用场景扩展

该技术方案不仅适用于音乐数据采集,还可拓展至其他领域:

  1. 市场研究:采集公开网页数据,辅助行业分析。
  2. 电商监控:监控商品价格与排名变化。
  3. 品牌保护:全天候监测侵权内容与舆情动态。
  4. 运维测试:测试网站在不同地域的性能稳定性。

五、注意事项

  • 合规性:务必遵守目标平台的 robots 协议及服务条款,不可进行非法采集。
  • 隐私保护:使用真实 IP 代理时,注意自身数据的保密性。
  • 频率控制:合理设置请求间隔,避免对目标服务器造成压力。

通过合理的代理配置与规范的代码实现,可以有效解决大部分反爬限制问题,提升数据采集的稳定性和效率。

目录

  1. Python 实现音乐数据自动化采集与代理方案
  2. 一、背景与挑战
  3. 二、技术选型思路
  4. 三、完整实现流程
  5. 1. 获取代理凭证
  6. 2. 配置白名单
  7. 3. 代码实现
  8. 依赖安装
  9. 需要安装 requests, openpyxl 等库
  10. 主逻辑函数
  11. 四、应用场景扩展
  12. 五、注意事项
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 字节扣子搭建大模型擂台:匿名 PK 与用户评价机制
  • 快速修复 SQLyog 连 MySQL 8.0 的 2058 错误
  • DooTask 轻量级项目管理工具:AI 驱动的团队协同实践
  • Spring Boot 视图层架构与主流模板引擎集成实战
  • 前端部署最佳实践:从开发到生产
  • 从 C 到 Java:面向对象编程核心概念实战
  • OpenClaw 漏洞预警:如何为 AI 代理添加行为审计?
  • KaiwuDB+CodeArts 智能体,让ai快速构建一个智能家居本地化数据处理系统
  • PowerShell Invoke-WebRequest 报错 Invalid URL 和 CommandNotFound 排查指南
  • 【VR音游】音符轨道系统开发实录与原理解析(OpenXR手势交互)
  • 2025 年 FPGA 就业形势分析:入行指南与薪资行情
  • STL 中 set 与 map 的实现原理及高频算法题实战
  • OpenClaw 多飞书机器人配置指南
  • 基础数论算法详解:最大公约数、质数筛与同余方程
  • 若依 (RuoYi) 低代码框架深度解析与选型建议
  • 本地部署 LLaMA-Factory 并微调 Qwen2.5 模型
  • 哈希表详解:概念、冲突解决与 C++ 实现
  • LLaMA 衍生模型:官方演进与社区微调
  • MiGPT GUI 让小爱音箱变身个性化 AI 助手并支持远程管理
  • C++ 异常处理机制详解:抛出、捕获与栈展开

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online