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

Python 自动化采集音乐数据实战:解决反爬与代理配置

针对网络爬虫反爬限制问题,通过集成第三方代理 API 结合 Python 脚本实现自动化数据采集。方案涵盖代理配置、请求头伪装及数据解析存储流程,最终将每日推荐歌曲导出至 Excel。重点在于解决 IP 被封禁风险,确保长期稳定运行,同时强调合规采集的重要性。

黑客帝国发布于 2026/3/25更新于 2026/7/2031 浏览
Python 自动化采集音乐数据实战:解决反爬与代理配置

Python 自动化采集音乐数据实战:解决反爬与代理配置

一、前言

最近想做一个网易云音乐每日推荐歌单存档小工具,每天自动获取推荐歌曲并保存为 Excel 方便回顾。但在初期测试中发现,刚运行几天代码就报网络异常,手动访问发现被平台限制:刷新 10 次有 8 次触发验证,根本拿不到数据。

一开始尝试了两种办法:先用免费代理池,结果要么失效快,要么访问速度极慢,同步成功率不到 30%;后来手动切换手机热点,每天要操作多次,还得盯着程序有没有断线,完全背离了自动化的初衷。

后来了解到,很多爬虫场景下,IP 的真实性和稳定性是关键。通过引入第三方代理服务,模拟正常用户访问,可以有效降低被识别为爬虫的风险。抱着试试看的心态调整方案后,问题得到了解决。

二、技术选型分析

为什么选择代理服务?主要基于以下三点考量:

  • 地域覆盖:之前获取某些地区榜单时,资源往往集中在中美欧,小语种地区支持不足。好的代理服务通常覆盖全球 220+ 国家/地区,能快速获取当地资源,响应速度也有明显提升。
  • 自动轮转:手动切换 IP 效率太低。成熟的代理服务支持失效自动切换,例如设置响应延迟超过阈值即自动更换节点,大幅减少了人工干预成本。
  • 场景适配:针对特定业务场景(如音乐流媒体),选择合适的代理池能有效降低反爬拦截率。

三、从 0 到 1 的完整流程

对于新手来说,代理配置其实并不复杂,关键在于细节处理。以下是经过验证的实施步骤:

第一步:注册与认证

在服务商后台完成注册,建议使用手机号快速登录。登录后建议完成身份验证,这有助于解锁更高的并发请求权限。认证流程通常较为简单,按提示提交资料即可。

第二步:选择套餐

根据实际需求选择服务类型,常见的有动态住宅和静态住宅等。如果不确定用量,可以先充值按需消费。如有特殊需求,也可联系技术支持咨询定制方案。

第三步:获取并配置代理

认证通过后,在后台选择 API 获取模式。可以根据需求设置 IP 数量、国家、城市等参数,生成专属链接。

注意:务必将使用设备的公网 IP 添加到白名单才能正常使用。局域网 IP(如 192.168.x.x)无法生效,请提前查询好设备公网地址。

复制生成的链接后,在浏览器中测试请求,确认能获取到可用资源和端口后再进行应用集成。

四、实战代码实现

为了验证效果,我们使用 Python 配合代理服务进行数据采集,目标是提取网易云音乐的每日推荐歌曲信息,并保存到 Excel 中。

1. 导入必要的库

import requests
import json
from openpyxl import Workbook
from datetime import datetime
import time
import os

2. 通过 API 获取代理资源

定义一个主函数来获取代理资源,这里使用了 try-except 结构来处理可能的网络异常,确保返回结果的可靠性。

def get_proxy_resource(proxy_api_url):
    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"成功获取:{proxy_ip}")
                return proxy_ip
            else:
                print("返回的列表为空")
                return None
        else:
            print(f"获取失败,状态码:{response.status_code}")
            return None
    except Exception as e:
        print(f"连接代理 API 失败:{e}")
        return None

3. 配置代理参数和请求头

设置代理字典和请求头,模仿真实浏览器的行为是绕过反爬的关键。

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

# 目标 API 配置
netease_url = 'https://music.163.com/api/v3/discovery/recommend/songs'

# Cookie 配置
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 信息...'
}

4. Excel 文件初始化

在发送请求前,先创建 Excel 工作簿结构。

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

5. 发送请求与处理数据

发送请求并解析 JSON 数据,将获取到的歌曲信息写入表格。

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()
        print(f"返回代码:{data.get('code')}")
        
        if data.get('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}")
                ws.append([index, song_name, artists, album, song_id, duration, play_url])
except Exception as e:
    print(f"发生错误:{e}")

6. 文件保存与异常处理

最后将数据保存到桌面,并完善错误处理逻辑。

if os.name == 'nt':
    desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
else:
    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("完成数据获取!")

7. 程序主入口

完整的程序需要一个主入口来协调执行流程。

if __name__ == "__main__":
    print("=" * 60)
    print("网易云音乐每日推荐歌曲提取")
    print("=" * 60)
    
    # 假设 proxy_api_url 已在外部配置
    proxy_api_url = "填写你的代理 API 链接"
    proxy_ip = get_proxy_resource(proxy_api_url)
    
    if proxy_ip:
        # 此处应调用上述数据处理函数
        print("\n任务完成!请查看桌面上的 Excel 文件")
    else:
        print("\n任务失败,请检查网络或服务状态")

五、应用场景拓展

除了音乐数据采集,这类技术方案还可以应用于多个领域:

  1. 数据驱动决策与市场研究:高效采集公开数据,包括网页数据采集、市场调查、行业信息跟进等,为企业战略决策提供精准的数据支撑。
  2. 电子商务竞争与数字化营销:监控平台价格、排名变化;通过本地化广告验证和 SEO 优化,助力企业提升营销效果与市场竞争力。
  3. 品牌保护与舆情风险管理:全天候监控,有效发现侵权内容、监测舆情动态,帮助企业及时维护品牌形象与价值。
  4. 技术运维与安全验证:协助测试网站在不同地域的性能稳定性,排查网络连通性问题。

六、总结与建议

在实际使用中,总结了以下几点经验供参考:

  • 适用人群:有合法数据采集需求(如个人项目、企业调研)、需要稳定 IP、不想花时间折腾底层原理的人。
  • 合规提醒:一定要遵守目标平台的规则,不可做非法采集或滥用接口。
  • 成本控制:代理服务通常按流量计费,合理规划用量可有效控制成本。

如果遇到 IP 被限制、采集不稳定等问题,引入专业的代理服务通常是有效的解决方案。但请记住,工具只是辅助,建立合法合规的采集习惯才是最重要的。

目录

  1. Python 自动化采集音乐数据实战:解决反爬与代理配置
  2. 一、前言
  3. 二、技术选型分析
  4. 三、从 0 到 1 的完整流程
  5. 第一步:注册与认证
  6. 第二步:选择套餐
  7. 第三步:获取并配置代理
  8. 四、实战代码实现
  9. 1. 导入必要的库
  10. 2. 通过 API 获取代理资源
  11. 3. 配置代理参数和请求头
  12. 设置代理
  13. 目标 API 配置
  14. Cookie 配置
  15. 4. Excel 文件初始化
  16. 5. 发送请求与处理数据
  17. 6. 文件保存与异常处理
  18. 7. 程序主入口
  19. 五、应用场景拓展
  20. 六、总结与建议
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Spring IOC 注解进阶:@Bean 管理第三方 Bean、@Import 拆分配置与@Value 注入
  • AIOps 实践:基于 Dify+LangBot 实现飞书智能体对话机器人
  • Ubuntu 部署 OpenClaw 并接入飞书机器人
  • Midjourney 结合 Photoshop 实现 AI 电商场景合成工作流
  • 前端 IndexedDB 实战指南
  • 基于FPGA的CARRY4抽头延迟链TDC延时仿真
  • Spring AI 接入 Agent Skill 实战指南
  • Rust 异步编程:错误处理的艺术与实践
  • 自然语言处理在社交媒体分析中的应用与实战
  • Web 扫雷游戏项目实现与说明
  • C语言递归快速排序算法详解
  • 三维人体姿态估计的前沿算法与论文案例
  • 二分查找实战:x 的平方根与搜索插入位置解析
  • 无线联邦学习:隐私保护下的 AI 协同演进
  • Linux 基础指令与权限管理指南
  • FPGA 实现高效 FFT/IFFT 变换:IP 核优化与 Verilog 测试验证
  • Eino ADK 实战:深入理解 ChatModelAgent 的 ReAct 循环与工程化配置
  • 网络安全入门:从基础到求职的实用路径
  • Python 数据分析进阶:模型评估与图像处理实战
  • FPGA 实现任意角度图像旋转:原理与流水线设计

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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