⭐废话:从去年十二月底开始写教务系统爬虫的,起初只因想快速清晰地查期末成绩,不然每次要点很多步骤。
后面用自己的方法写出来了,但因为那时候刚接触爬虫,代码写的非常糟。。。
甚至不知道怎么用cookies和session,导致不久就被教务系统封掉了IP。。。
后面看到GitHub上一位大哥的API,参照了开头的部分,学习到了思路,后面开发了小程序,然后断断续续到今天重构完,这个项目总算是能看了…
相关说明
功能实现
- 个人信息
- 停补换课消息
- 课程修读情况(学业详情)
- 成绩
- 课表
- 查询已选课程
- 选课
- 退课
- 录取查询(仅本校)
- 空教室查询
- 响应式后台管理数据库
- 对每天的每个请求生成日志文件
- 避免教务系统无法访问,存储部分请求数据到服务器,可选参数刷新
返回数据内容说明
- 点击JSON说明.MD访问返回的JSON数据键值名称以及具体内容说明
Tips
- 为了方便管理和请求,不采用传递cookies的方法,而是将cookies存储到数据库让服务器请求
- 须先通过pinfo新增学生后才能访问其它API
- 使用simpleui后台,自定义在settings.py以及info/admin.py和info/models.py
- 选课API可能并不通用,这里仅提供思路,具体请参照自己学校情况
- 代码中有关于开发者本校的录取查询(recruitApp),不通用,请自行编写替换或删除
- 使用MySQL数据库,请保证MySQL版本为5.6及以上
- config.json中包含了http代理、官网、Server酱、上下课时间配置
- ServerChan为none时,不使用Server酱,而配置时须填上完整url,末尾以’.send?'结尾
- proxy为none时,不使用代理
- nowterm本来想写成自动判断的,但想到第一个期末成绩出来的时间不定,所以还是用了手动配置,'3’为上学期,'12’为下学期
接口
信息请求
个人信息(必须,用以登录):/info/pinfo
参数名 | 必选 | 说明 |
---|---|---|
xh | 是 | 学号 |
pswd | 是 | 密码 |
停补换课消息:/info/message
参数名 | 必选 | 说明 |
---|---|---|
xh | 是 | 学号 |
pswd | 是 | 密码 |
课程修读情况(学业详情):/info/study
参数名 | 必选 | 说明 |
---|---|---|
xh | 是 | 学号 |
pswd | 是 | 密码 |
refresh | 否 | 填入’no’则读取缓存 |
成绩: /info/grade
参数名 | 必选 | 说明 |
---|---|---|
xh | 是 | 学号 |
pswd | 是 | 密码 |
year | 是 | 学年 |
term | 是 | 学期(1 or 2) |
refresh | 否 | 填入’no’则读取缓存 |
课表:/info/schedule
参数名 | 必选 | 说明 |
---|---|---|
xh | 是 | 学号 |
pswd | 是 | 密码 |
year | 是 | 学年 |
term | 是 | 学期(1 or 2) |
refresh | 否 | 填入’no’则读取缓存 |
手动更新cookies:/info/update
参数名 | 必选 | 说明 |
---|---|---|
xh | 是 | 学号 |
pswd | 是 | 密码 |
选课请求
已选课程:/choose/choosed
参数名 | 必选 | 说明 |
---|---|---|
xh | 是 | 学号 |
pswd | 是 | 密码 |
refresh | 否 | 填入’no’则读取缓存 |
板块课:/choose/bkk
参数名 | 必选 | 说明 |
---|---|---|
xh | 是 | 学号 |
pswd | 是 | 密码 |
bkk | 是 | 板块号(1 or 2) |
选课:/choose/choose
参数名 | 必选 | 说明 |
---|---|---|
xh | 是 | 学号 |
pswd | 是 | 密码 |
doId | 是 | 执行ID,精确到班级,从板块课API中可获取 |
kcId | 是 | 课程号,精确到课程,从板块课API中可获取,在其它API中字段名为"courseId" |
kklxdm | 是 | 精确到板块课页面,从板块课API中可获取,板块课1、2不同 |
退课:/choose/cancel
参数名 | 必选 | 说明 |
---|---|---|
xh | 是 | 学号 |
pswd | 是 | 密码 |
doId | 是 | 执行ID,精确到班级,从板块课API中可获取 |
kcId | 是 | 课程号,精确到课程,从板块课API中可获取,在其它API中字段名为"courseId" |
其它请求
one·一个 每日文字:/one
※method : GET
录取查询(仅作者学校):/recruit/query
参数名 | 必选 | 说明 |
---|---|---|
identity | 是 | 考生号 or 身份证号 |
使用部署
- 推荐使用**uswgi+nginx**,具体部署可移步百度 - 更改config.json中各项:参照上方Tips测试部署-测试用
- 请确保服务器或虚拟环境安装了Python3.6及以上版本
1.安装依赖模块
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
2.开放安全组配置
- 开放8000端口
3.使用-迁移数据库
- 在settings.py中配置数据库信息
$ python manage.py makemigrations
$ python manage.py migrate
4.创建后台用户
$ python manage.py createsuperuser
5.用终端打开zfnweb文件夹,并运行
$ python manage.py runserver 0.0.0.0:8000
6.访问后台
/admin
访问你服务器的IP地址:8000/xxx