diy选课助手
跳转网址:https://github.com/mkbk-with-circle/PKU-Schedule-Planner (opens new window)
博主用2h速通了一个用于爬取北大选课系统课程信息、智能解析课表、可视化选课管理的工具集。
这个项目诞生是因为笨人已经大四然后毕业学分修得差不多了,最后一学期想好好利用一下贵校的“通识课”资源,所以想多去其他院系听听课,于是乎挑选了将近十门其他院系的专业课,但是无奈必须要等到跨院系选课开始才可以安排课表;笨人当然可以接受旁听,但是也不能在课程间发生时间上的冲突对吧!遂用ai花了2h速通了一版可以爬取课程,自主选课的简易ui~
样式belike:

blog里就不多把README里的东西放进来了,大概说一下开发流程趴~
# 开发流程
博主脑子里大概生成了一个流程,分为爬虫爬取课表和制作ui界面,然后就开始玛不停蹄地写prompt()
# 一,爬虫爬取+数据处理
# 爬虫爬取
主要是把选课界面截了个图给ai(GPT5.2),然后把网址给他,告诉他我需要爬取这一页(包括后面页数)的课表,然后告诉他具体的"保存格式"(csv还是xlsx,一开始默认csv,但是因为其保存内容的格式兼容性不如xlsx),一开始ai写了个大致的框架出来,按照它的要求把cookie改完了之后可以进行选课了;但是初次运行发现虽然能访问网页,但是因为它不了解网页的html结构所以解析失败了,然后直接用开发者工具把有效信息的html结构给它,然后ai就给了一版能跑的代码,后续就是格式上的小问题;
这个时候就得到了xlsx下的文件:

# 数据处理
这一步主要是从爬虫爬取的数据文件中解析出需要的信息,并且做好方便后续ui文件调用的数据接口 大概有这几个关键prompt
- 以(课程号,课程名,老师,班号)为每个课表唯一的标识,并且可以由该四元组查询到该课程的其他附属信息;
- 解析上课时间(重点),需要解析出持续时间、周几上课、具体课时,并且每个课程可能还包括单双周等
- 做成合适的数据结构,方便后续调用该脚本从而直接获得
# 二,制作ui界面
直接把我喂给ai的prompt放在这里:
我需要你制作一个选课的ui界面;具体而言需要这样
- 我需要看到每一周的课表排布,从周一到周日的都要,并且每天有12节课(可以参考图中所示);就是虽然只显示某一周的,但是我可以通过左右按钮来查看1~16周的每一周的课表
- 我需要有课程目录,里面显示了上一阶段读取到的所有数据结构里的(课程名,老师)(这里不需要课程号,但是依然是三元组为唯一标识),可以用鼠标上下滑动查看;也可以通过“开课单位”进行筛选
- 课程目录应该分为两栏:“已选课课程目录”和“未选课课程目录”;
- 对于“未选课课程目录”我可以选取某个课程(最好可以多选),然后计算它们的时间是否冲突,如果不冲突就各自按照其上课时间加入到显示的课表中,然后这些课程移动到已选课课程目录,如果冲突就取消并且提示用户哪两个冲突了;
- 对于“已选课课程目录”,我可以选取某节课(最好可以多选)然后取消选课,显示的课表中也就去除掉对应时间的课程;
- 注意,总学分限制为25分(这个可以让用户修改学分限制)
# 功能特性
大概有这几个主要功能~
- 课程数据爬取: 自动从北大选课系统获取所有可选课程信息
- 智能课表解析: 支持节次制与钟点制的自动识别与转换
- 可视化选课: 图形界面展示课表、检测时间冲突、学分管理
- 多条件筛选: 按开课单位、教师、学分等维度过滤课程
- 冲突检测: 自动识别时间冲突,防止选课失败
# 说在后面
因为目前仅仅是观察我自己的课表,然后得出了匹配/解析时间的规则,然而可能还会遇到其他奇奇怪怪的课表时间(例如清华互选课程的时间),这样的课表时间会导致无法解析,但是博主已经在里面加入了debug代码帮助大家尽快发现这样的问题,剩下的就要靠大家集思广益力!
更新一下 最近新增了“冲突课表保留”功能和“课表导入导出”功能!