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

Python 结合住宅代理实现网易云音乐数据自动化采集

针对网络爬虫常见的反爬限制问题,利用住宅代理 IP 配合 Python 脚本实现网易云音乐每日推荐数据自动采集的完整方案。通过解析代理 API 获取动态 IP,配置请求头与 Cookie,并结合 openpyxl 将数据导出为 Excel。重点讲解了代理轮转、异常处理及合规采集的注意事项,帮助开发者稳定获取公开数据。

霸天发布于 2026/3/29更新于 2026/10/2092 浏览
Python 结合住宅代理实现网易云音乐数据自动化采集

前言

在做数据归档类工具时,经常会遇到目标平台的风控限制。比如尝试抓取某云音乐的每日推荐歌单,运行几天后代码频繁报网络异常,手动访问也常触发验证机制。单纯依赖免费代理池往往失效快、速度慢,同步成功率低;手动切换热点则违背了自动化的初衷。

解决这类问题的关键在于使用高质量的住宅 IP 代理服务。通过模拟真实用户访问,可以有效绕过反爬策略。本文将分享如何利用 Python 配合代理 API,稳定完成数据采集并导出 Excel 的完整流程。

技术选型与优势

在选择代理方案时,主要关注以下三点:

  1. 地域覆盖:普通数据中心 IP 容易被识别,住宅 IP 能覆盖全球 200+ 国家和地区,获取当地榜单资源更精准,响应速度通常更快。
  2. 自动轮转:支持根据延迟或错误率自动切换 IP,减少人工干预。设置合理的超时阈值(如 1 秒)即可触发切换,稳定性远高于静态 IP。
  3. 场景适配:针对特定业务(如音乐流媒体)选择专用池,可显著降低拦截率。

实际使用中,住宅级真实 IP 在请求头表现上与正常浏览器无异,且服务方通常提供 7x24 小时技术支持,便于排查认证问题。

从 0 到 1 实现流程

很多开发者担心代理配置复杂,其实核心逻辑并不繁琐。以下是经过实战验证的步骤:

第一步:注册与认证

在代理服务商后台完成账号注册与身份认证。认证通过后,通常可以解锁更高的并发请求权限,这对批量采集至关重要。

第二步:选择套餐与获取凭证

根据预估流量选择动态或静态住宅 IP 套餐。若需求不明确,可按需充值。获取 API 链接时,注意设置好 IP 数量、国家及城市参数。

注意:务必将执行脚本的设备公网 IP 加入白名单。局域网 IP(如 192.168.x.x)无法生效,请先查询本机公网地址。

第三步:编写采集脚本

下面是一个完整的 Python 示例,整合了代理获取、请求发送及数据保存逻辑。

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

def get_proxy_ip(api_url):
    """
    通过代理 API 获取可用 IP
    :param api_url: 代理服务商提供的 API 链接
    :return: 代理 IP 字符串
    """
    print("正在获取代理资源...")
    try:
        response = requests.get(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 f"http://{proxy_ip}"
        print("返回列表为空或状态码异常")
        return None
    except Exception as e:
        print(f"连接代理 API 失败:{e}")
        return None

def save_to_excel(data, filename):
    """
    将数据写入 Excel 文件
    """
    wb = Workbook()
    ws = wb.active
    ws.title = "每日推荐歌曲"
    
    # 表头
    headers = ['序号', '歌曲名称', '歌手', '专辑', '歌曲 ID', '时长', '播放链接']
    ws.append(headers)
    
    for index, song in enumerate(data, 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}"
        
        ws.append([index, song_name, artists, album, song_id, duration, play_url])
        print(f"{index:2d}. {song_name} - {artists}")
    
    # 保存到桌面
    desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    file_path = os.path.join(desktop_path, f"{filename}_{timestamp}.xlsx")
    
    if not os.path.exists(desktop_path):
        desktop_path = os.path.expanduser("~")
        file_path = os.path.join(desktop_path, f"{filename}_{timestamp}.xlsx")
        
    wb.save(file_path)
    print(f"数据已保存至:{file_path}")

def main():
    # 替换为实际的代理 API 地址
    proxy_api_url = "YOUR_PROXY_API_URL_HERE"
    netease_url = 'https://music.163.com/api/v3/discovery/recommend/songs'
    
    # 获取代理
    proxy_addr = get_proxy_ip(proxy_api_url)
    if not proxy_addr:
        print("无法获取代理,程序终止")
        return

    proxies = {'http': proxy_addr, 'https': proxy_addr}
    
    # 请求头配置,模拟浏览器行为
    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': 'YOUR_COOKIE_HERE'  # 请替换为有效的登录 Cookie
    }
    
    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')
            
            if code == 200:
                songs = data['data']['dailySongs']
                print(f"成功获取到 {len(songs)} 首每日推荐歌曲")
                save_to_excel(songs, "网易云每日推荐")
            else:
                print(f"API 返回错误码:{code}")
        else:
            print(f"HTTP 请求失败:{response.status_code}")
            
    except requests.exceptions.ProxyError as e:
        print(f"代理连接失败:{e}")
    except requests.exceptions.Timeout:
        print("请求超时")
    except requests.exceptions.ConnectionError as e:
        print(f"连接错误:{e}")
    except json.JSONDecodeError as e:
        print(f"JSON 解析错误:{e}")
    except Exception as e:
        print(f"未知错误:{e}")

if __name__ == "__main__":
    print("=" * 60)
    print("网易云音乐每日推荐歌曲提取")
    print("=" * 60)
    main()

常见应用场景

除了音乐数据归档,此类技术方案还适用于多种业务场景:

  1. 市场研究:采集公开网页数据,辅助行业分析与战略决策。
  2. 电商监控:监测竞品价格、排名变化,优化营销策略。
  3. 品牌保护:全天候监控侵权内容,维护品牌形象。
  4. 性能测试:利用不同地域 IP 测试网站在全球范围内的访问稳定性。

总结与建议

使用代理进行数据采集时,有几个关键点需要注意:

  • 合规性:严格遵守目标网站的服务条款,仅采集公开数据,避免侵犯隐私或商业机密。
  • 频率控制:不要高频请求,适当增加随机延时,模拟人类操作习惯。
  • IP 质量:优先选择高匿名的住宅 IP,数据中心 IP 极易被封锁。
  • 异常处理:代码中必须包含完善的 Try-Catch 结构,防止因网络波动导致程序崩溃。

工具只是辅助,建立合法合规的采集习惯才是长久之计。希望这篇教程能帮助你在遇到反爬限制时找到合适的解决方案。

目录

  1. 前言
  2. 技术选型与优势
  3. 从 0 到 1 实现流程
  4. 第一步:注册与认证
  5. 第二步:选择套餐与获取凭证
  6. 第三步:编写采集脚本
  7. 常见应用场景
  8. 总结与建议

更多推荐文章

查看全部
  • Python 属性描述符:从原理到 ORM 实践详解
  • Vue3 点击方法提示不存在?检查是否缺少 setup 暴露
  • 贪心算法和动态规划:原理、区别与 C++ 示例
  • 自然语言处理在教育领域的应用与实战
  • FPGA与PHY芯片的SGMII接口硬件协同设计详解
  • 数组算法总结:二分查找、快慢指针、双指针与滑动窗口
  • Python FastAPI 入门实战:从零构建生产级 RESTful API
  • OSCP 实战:Net-NTLMv2 哈希传递与中继攻击详解
  • Web-Check 本地部署与公网远程访问实战
  • 10 个开源免费的大模型学习资料推荐
  • Fanuc 机器人与 PLC 的 Ethernet/IP 通信
  • Llama-3.2-3B Ollama 实战:小模型实现高质量响应方案
  • 量化入门实战:Windows 下使用 Python 调用 TdxQuant 获取 A 股行情
  • Trae IDE 核心机制拆解:AI Agent 中 Skill 的定义与功能实现
  • 前端数据埋点:核心原理、主流方案与落地实践
  • URDF 机器人模型描述标准 XML 格式详解
  • OpenClaw 多飞书机器人与多 Agent 团队实战复盘
  • SD-WebUI模型下载器:国内用户免代理高速下载Civitai模型完整指南
  • 二叉树算法实战:美国血统重建与深度宽度计算
  • GESP 2025 年 9 月 C++ 四级认证真题解析:判断题 1-10

相关免费在线工具

  • 加密/解密文本

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