成都理工大学招生信息网专业信息自动化实战
🎯 项目背景
这篇文章分享的是成都理工大学招生信息网(🔗学院专业页面)的自动化爬取实战:它有瑞数五代动态验证、自动化行为检测、动态Cookie/请求头校验等反爬屏障,纯静态请求(requests/urllib裸连)根本拿不到真实数据,必须用带浏览器渲染的方案。
最终我们实现了绕过所有防护 → 模拟人类操作 → 提取学院专业数据 → 导出Excel的全流程。
🕵️ 网页快速分析
首先看一眼目标页结构:
- 页面是学院专业列表的静态布局?但刷新后会发现有短暂的瑞数安全跳转
- 数据用
ul.xy-list下的li.li1包裹学院,每个学院下的dd.a存专业
防护层的细节(通过开发者工具Network+Console观察):
- 首次请求会返回瑞数混淆脚本,生成
sMLAeTqisZbFP等动态Cookie - 会检测
navigator.webdriver、浏览器特征变量、鼠标/键盘行为 - 412错误是请求头缺失的典型表现,SSL证书偶尔会有本地验证失败的问题
🚩 核心问题清单
- 动态Cookie更新:瑞数的Cookie有效期短,纯静态维护会失效
- 瑞数五代绕过:混淆JS生成验证数据,静态逆向难度极大
- SSL证书验证:部分测试环境会拦截HTTPS请求
- 完整请求头构建:Referer、Accept-Language等字段缺一不可
- 反自动化检测:隐藏浏览器特征、模拟随机操作
🏗️ 技术架构
我们采用 「DrissionPage浏览器自动化 + 反检测JS注入 + urllib安全请求」 的混合方案:
- DrissionPage:比Selenium轻量,自带等待机制,适合复杂渲染页
- 反检测JS:直接覆盖浏览器自动化特征
- urllib:在拿到有效Cookie后,用来做数据提取的轻量请求,减少浏览器资源消耗
💻 核心功能实现
1. 浏览器初始化配置
⚠️ 关键参数:
timeout=15:给足瑞数脚本执行时间set.window.max():避免小窗口/固定分辨率这类典型的自动化特征
2. 反自动化JS注入
瑞数会通过检查navigator.webdriver、CDP注入特征变量、debugger断点来识别爬虫,我们直接在页面加载前注入JS覆盖这些检测点:
3. 人类行为模拟
瑞数还会检查鼠标/键盘/滚动行为,我们加入简单的随机操作:
4. 瑞数安全核心绕过
混合方案的关键:先让浏览器过瑞数验证,再把有效Cookie传给urllib做轻量请求
📡 请求构造模块
拿到有效Cookie后,我们用urllib封装安全请求,避免频繁打开/关闭浏览器页面,也降低反爬风险。
1. 动态Cookie提取
✅ 提取的关键Cookie:
JSESSIONID:会话标识sMLAeTqisZbFP:瑞数五代动态令牌
2. 完整请求头构建
瑞数对请求头非常敏感,Referer、User-Agent、Accept-Language、Sec-Fetch-* 系列字段缺一不可:
3. 安全请求封装
加入随机延迟、重试机制、禁用SSL验证:
📊 数据提取与导出
拿到真实HTML后,用BeautifulSoup解析,pandas导出Excel:
🛡️ 异常处理方案
📝 环境与执行
环境要求
- Python 3.8+
- Chrome/Chromium 100+(自动下载DrissionPage内置的Chromium也可以)
- 依赖库:
执行命令
输出示例
📌 注意事项
- 仅供学习交流使用:请勿用于商业用途或大规模爬取,尊重学校的服务器资源
- 瑞数更新较快:如果反检测JS失效,需要通过开发者工具观察新的检测点并更新
- 代理IP慎用:学校网站的反爬主要是特征检测,IP封禁较少,频繁换代理反而可能增加特征
- 数据更新:建议定期检查学校招生网的页面结构,调整BeautifulSoup的解析逻辑

