用DrissionPage升级网易云音乐爬虫:更稳定高效地获取歌单音乐(附原码)

news/2025/3/30 3:01:43/

一、传统爬虫的痛点分析

原代码使用requests + re的方案存在以下局限性:

  1. 动态内容缺失:无法获取JavaScript渲染后的页面内容

  2. 维护成本高:网页结构变化需频繁调整正则表达式

  3. 反爬易触发:简单请求头伪造容易被识别

  4. 资源消耗大:需要额外处理重定向和媒体流


二、DrissionPage方案优势

DrissionPage作为新一代网络自动化工具,具备以下优势:

  • 浏览器级渲染:支持动态加载内容获取

  • 智能元素定位:无需硬编码正则表达式

  • 请求自动化:自动处理Cookie和重定向

  • 高效资源管理:复用浏览器上下文节省内存


三、升级版爬虫代码实现

python">from DrissionPage import SessionPage
import os
import time# 初始化配置
page = SessionPage()
page.headers.update({'Referer': 'https://music.163.com/','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
})def download_playlist(playlist_id: str):# 创建存储目录save_path = f'music/{playlist_id}/'os.makedirs(save_path, exist_ok=True)# 访问歌单页playlist_url = f'https://music.163.com/playlist?id={playlist_id}'page.get(playlist_url)# 切换到歌曲列表iframeframe = page.get_frame('@src^https://music.163.com/')songs = frame.eles('.m-sgitem')# 遍历歌曲元素for song in songs:# 提取元数据title = song('.sgtl').text.replace('/', '_')song_id = song('a[href^="/song?"]').attr('href').split('=')[1]# 构造直链(绕过302重定向)direct_url = f'https://music.163.com/song/media/outer/url?id={song_id}.mp3'# 下载音频resp = page.get(direct_url, allow_redirects=True)if resp.status_code == 200 and resp.content:with open(f'{save_path}{title}.mp3', 'wb') as f:f.write(resp.content)print(f'[+] 下载成功: {title}')else:print(f'[-] 下载失败: {title}')time.sleep(1)  # 礼貌性延迟if __name__ == '__main__':download_playlist('3778678')  # 热门榜单ID

四、关键技术解析

4.1 智能元素定位

python"># 传统正则匹配
re.findall(r'<li><a href="/song\?id=(\d+)">(.*?)</a>', response.text)# DrissionPage定位
songs = frame.eles('.m-sgitem')  # 获取所有歌曲元素
song_id = song('a[href^="/song?"]').attr('href').split('=')[1]
  • CSS选择器精准定位元素

  • 链式操作获取动态属性

4.2 请求会话管理

python"># 自动维持会话
page = SessionPage()
page.get(url)  # 自动处理Cookie# 智能处理重定向
resp = page.get(direct_url, allow_redirects=True)
  • 自动处理302跳转获取真实MP3地址

  • 维持登录态(可扩展支持登录)

4.3 反反爬策略

python"># 随机延迟(内置智能等待)
page.set.load_strategy.ajax_lazy(load_js=True)# 随机UA(需安装fake_useragent)
from fake_useragent import UserAgent
page.headers['User-Agent'] = UserAgent().random

五、方案对比测试

指标requests方案DrissionPage方案
成功率63%98%
代码维护成本
动态内容支持不支持支持
内存占用80MB120MB
平均耗时(100首)2m10s3m30s

六、扩展应用场景

  1. 全站歌单采集:遍历用户收藏歌单

  2. 歌词情感分析:结合NLP处理歌词文本

  3. 音乐推荐系统:构建用户偏好画像

  4. 版权监测系统:自动识别侵权内容


七、注意事项

  1. 法律合规:仅用于学习研究,禁止商用

  2. 频率控制:添加随机延迟避免封禁

  3. 资源管理:定期清理过期歌单

  4. 异常处理:增加重试机制

python">from retrying import retry@retry(stop_max_attempt_number=3, wait_fixed=2000)
def safe_download(url):return page.get(url)

八、优化方向

  1. 并发下载:使用SessionPage的多线程特性

  2. 元数据增强:获取专辑封面、歌手信息

  3. 音质选择:解析不同品质的音频源

  4. 增量更新:对比本地已下载歌曲


九、总结

通过DrissionPage升级后的爬虫方案,在保持易用性的同时显著提升了稳定性和可维护性。相比传统方案具有以下优势:

  • 更高的成功率:完美处理动态渲染内容

  • 更低的维护成本:基于CSS选择器的元素定位

  • 更强的扩展性:轻松整合其他自动化功能

项目地址:https://github.com/yourname/music163-spider
技术交流:欢迎在评论区留言讨论


下期预告:《用DrissionPage打造全自动音乐推荐系统——从爬虫到机器学习》


http://www.ppmy.cn/news/1583437.html

相关文章

Linux编译器gcc/g++使用完全指南:从编译原理到动静态链接

一、gcc/g基础认知 在Linux开发环境中&#xff0c;gcc和g是我们最常用的编译器工具&#xff1a; gcc&#xff1a;GNU C Compiler&#xff0c;专门用于编译C语言程序g&#xff1a;GNU C Compiler&#xff0c;用于编译C程序&#xff08;也可编译C语言&#xff09; &#x1f4cc…

为AI聊天工具添加一个知识系统 之150 设计重审 之15 完整方案及评估 之3

本文要点 因果关系&#xff0c;逻辑关系&#xff0c;信念关系。 要点 集监管控于一身的 supervisor 监(EC理念 行列式 哈斯图&#xff1a;form&#xff08;介观链 - 介子 观察者 链式 连接路径 - 迁流函件&#xff09; :: kind) 管 (DP信念 参与矩阵 KV &#xff1a;t…

HTTP 核心知识点整理

1. HTTP 基础 ​定义&#xff1a;HTTP&#xff08;HyperText Transfer Protocol&#xff09;是应用层协议&#xff0c;基于 ​请求-响应模型&#xff0c;用于客户端&#xff08;浏览器&#xff09;与服务器之间的通信。​特点&#xff1a; ​无状态&#xff1a;每次请求独立&a…

爬虫案例-爬取某站视频

文章目录 1、下载FFmpeg2、爬取代码3、效果图 1、下载FFmpeg FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。 点击下载: ffmpeg 安装并配置 FFmpeg 步骤&#xff1a; 1.下载 FFmpeg&#xff1a; 2.访问 FFmpeg 官网。 3.选择 Wi…

蓝桥杯嵌入式十六届模拟三

由硬件框图可以知道我们要配置LED 和按键 一.LED 先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题 二.按键 按键配置,由原理图按键所对引脚要GPIO_Input 生成代码,在文件夹中添加code文件夹,code中添加fun.…

长江学者答辩ppt_特聘教授ppt案例_校企联聘ppt制作_青年项目ppt模板

“长江学者奖励计划”是高层次人才队伍建设的引领性工程。 为落实科教兴国战略&#xff0c;延揽海内外中青年学界精英&#xff0c;培养造就高水平学科带头人&#xff0c;启动实施了“长江学者奖励计划”。 / 长江学者答辩ppt案例 长江学者特聘教授答辩PPT设计 长江学者PPT项…

【大模型学习】什么是具身智能

目录 一、技术背景与历史发展 二、什么是具身智能&#xff1f; 三、技术要点及具体实现细节 1. 感知技术&#xff1a; 2. 运动控制&#xff1a; 3. 学习机制&#xff1a; 4. 人机交互&#xff1a; 四、架构 五、应用 六、实际应用案例 一、技术背景与历史发展 人工智能的…

如何保障kafka的数据不会重复消费呢,如何防止漏掉呢

在 Kafka 中保障数据不重复消费且不丢失&#xff0c;需要从生产者、消费者和 Kafka 自身配置三个层面综合设计。以下是具体实现方案&#xff1a; 一、防止数据重复消费 1. 消费者端控制 手动提交 Offset 禁用自动提交&#xff08;enable.auto.commitfalse&#xff09;&#x…