Python 结合代理 IP 自动化采集网易云音乐数据实战
前言
最近想做个网易云音乐每日推荐歌单存档小工具,每天自动获取推荐歌曲并存成 Excel。刚跑几天代码就报网络异常,手动访问发现被平台限制了:刷新 10 次有 8 次跳验证,根本拿不到数据。
一开始试过免费代理池,要么失效快,要么速度慢,同步成功率不到 30%;后来手动换手机热点,每天要切换好几次,还得盯着程序有没有断,完全背离了自动化的初衷。直到尝试使用住宅级代理 IP,模拟正常用户访问,才真正解决了这个问题。
全面认识
为什么选择代理 IP?
做数据采集时,代理 IP 主要解决三个核心问题:
- 地域覆盖:很多榜单只有中美欧资源,小语种地区完全没资源。好的代理能覆盖 220+ 国家/地区,响应速度比之前快了近 2 倍。
- 自动轮转:手动切换太费时间,支持失效自动切换——设置响应延迟超 1 秒就换,稳定性大幅提升。
- 场景适配:针对特定业务场景(如音乐平台)选择对应池子,反爬拦截率会明显下降。
实际使用感受
稳定运行两周后,有几个点特别实用:
- 资源丰富且稳定:覆盖全球多个地区的动态与静态资源,数据传输速度稳定,较少出现延迟或连接中断。
- 隐私保护:住宅级真实 IP,抓包看请求头和正常浏览器访问没区别,安全性高。
- 服务响应:遇到配置问题时,技术支持能提供针对性建议,甚至根据具体场景提供定制方案。
- 新手友好:支持 Windows/Linux/Mac 全系统,计费灵活,按流量算,适合个人项目测试。
手把手教你:从 0 到 1 的完整流程
很多新手怕「代理配置太复杂」,其实跟着步骤走很快就能搞定。
第一步:注册与认证
打开代理服务商官网,用手机号完成注册。登录账号后进入用户中心,建议完成身份验证,这样可以解锁更高的并发请求管理等高级功能。
第二步:选择套餐
在后台的'套餐购买'板块,能看到动态住宅、静态住宅等多种类型的服务。如果有明确需求直接选择对应套餐;如果不确定用量,可以先充值后按需消费。找不到匹配套餐时,也可以联系客服咨询专属定制服务。
第三步:获取并配置代理
认证通过后,在'获取代理'中选择'API 获取',根据需求设置 IP 数量、国家、城市等参数,生成链接。
这里需要注意,要把使用设备的公网 IP 添加到白名单才能正常使用。提前查好自己的设备公网 IP(百度搜「我的 IP」就行),别填局域网 IP(比如 192.168.x.x),不然会出现不可用情况。
复制生成的链接后,在浏览器中请求,就能获取到可用的资源和对应端口,接下来就可以根据自己的需求进行应用了。
实战体验
为了测试产品的实际使用效果,我尝试用它配合 Python 进行数据采集,目标是提取网易云音乐的每日推荐歌曲信息,并保存到 Excel 中。
我把完整的采集代码整理好了,加了详细注释,还补充了之前踩过的坑,新手直接改参数就能用。
1. 导入必要的库
import requests # 用于发送 HTTP 请求获取数据
import json # 用于解析返回的 JSON 格式数据
from openpyxl import Workbook # 用于创建和操作 Excel 文件
from datetime import datetime # 用于生成时间戳
import time # 用于处理时间相关操作
import os # 用于操作系统路径,确保文件保存到桌面
2. 通过 API 链接获取资源
定义一个主函数来获取代理资源,对返回结果进行多重验证,确保获取的有效。
def get_netease_recommendations_with_proxy():
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"成功获取:{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. 配置代理参数和请求头
设置代理和音乐 API 配置,注意 Cookie 需要替换为有效的登录凭证。
# 设置代理
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 文件结构。
# 创建 Excel 工作簿
wb = Workbook()
ws = wb.active
ws.title = "网易云每日推荐歌曲"
# 添加表头
ws.append(['序号', '歌曲名称', '歌手', '专辑', '歌曲 ID', '时长', '播放链接'])
5. 发送请求与处理数据
发送请求并处理返回的数据,将歌曲信息写入 Excel。
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}")
# 写入 Excel
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("完成数据获取!")
return True
7. 程序主入口
完整的程序还需要一个主入口来运行。
if __name__ == "__main__":
print("=" * 60)
print("网易云音乐每日推荐歌曲提取")
print("=" * 60)
success = get_netease_recommendations_with_proxy()
if success:
print("\n任务完成!请查看桌面上的 Excel 文件")
else:
print("\n任务失败,请检查网络或服务状态")
超多场景预设,助力解决难题
本次实战的音乐采集,凭借稳定、保护使用者的隐私和覆盖广的特点,帮助我成功实现项目。后来发现,它的用途比我想象的广,以下场景业务应该也可以帮助到您:
- 数据驱动决策与市场研究:可助力高效采集公开数据,包括网页数据采集、市场调查、行业信息跟进等,为企业战略决策提供精准的数据支撑。
- 电子商务竞争与数字化营销:在电商领域,它能保护隐私并监控平台价格、排名;营销方面,通过本地化广告验证和 SEO 优化,助力企业提升营销效果与市场竞争力。
- 品牌保护与舆情风险管理:支持全天候监控,可有效发现侵权内容、监测舆情动态,帮助企业及时维护品牌形象与价值。
- 技术运维与安全验证:借助网络资源,它能协助测试网站在不同地域的性能稳定性。
用后感受
总结一下它的适配人群和注意点:
- 适合的人:有合法数据采集需求(如个人项目、企业调研)、需要稳定 IP、不想花时间折腾代理的人 —— 尤其新手,不用懂底层原理,按步骤配置就能用。
- 避坑提醒:一定要遵守平台规则!不可做非法采集。
如果大家也遇到 IP 被限制、采集不稳定等问题,又不想在厂商上浪费太多时间,不妨试试 —— 但记住,工具只是辅助,合法合规的采集习惯才是最重要的。

