全校课表爬虫
要解决的问题
教务系统只对校园网开放,课表数据又分散在多个入口(本科、研究生、合川与綦江两个校区)。想把它们汇总成一份随时能查的数据。
两个难点
一是网络限制。 教务系统只允许校园网访问,校外要经 WebVPN 转发。而 WebVPN 会校验客户端的 TLS 指纹 —— 用普通的 HTTP 请求库直接请求会被 302 拦掉。解决办法是用 curl_cffi 伪造 Chrome 的 TLS/HTTP2 指纹,让网关认为这是真实浏览器的流量。
二是登录流程。 CAS 单点登录页面的参数经过 AES-128-CBC 加密,需要先从登录页取回参数并解密,再构造登录请求换取 webvpn token。图形验证码用 ddddocr 识别。
做法
登录成功后定时全量抓取,用 APScheduler 每天凌晨跑一次,把两个校区、本科与研究生的课表统一落到 SQLite。
另起一个只读的 FastAPI 服务提供查询接口:
- 按教师 / 教室 / 课程查课表
- 查询某时段的教室占用情况
- 查空教室
接口带 API Key 鉴权,Swagger 文档挂在 /docs。
一点说明
接口默认只对外暴露綦江校区的数据,全校数据仅供内部使用。