一个用来爬取教务系统成绩单并能进行灵活处理的教务系统爬虫程序
Warning
由于武汉大学采用了新教务系统,旧的教务系统被废弃,因此本项目停止维护
- 跨平台:Windows 10, Ubuntu, MacOS均可使用
- 自动识别验证码,用户只需要输入用户名和密码就可以登录
- 循环登录,本脚本采用自动识别验证码,但是验证码识别时常会有错误,循环登录可以提高您的用户体验
- 持久化用户名和密码,除非清除本地配置文件,不然用户只需一次输入用户名和密码即可登录
- 利用Unix风格的密码输入,自动隐藏命令行下密码的显示,保护您的隐私
- 爬取的成绩单持久化到本地,一次爬取多次查询,减轻教务系统服务器压力
- 支持按照课程名称查询课程,而且用户无需输入精确的名称即可查询
- 支持按照年份,种类(公必,公选,专必,专选)查询各种课程
- 支持获取课程平均分,GPA, 以学分为权的平均分,总学分等各种信息
- 支持HTML转CSV, 当程序的接口不能满足用户需要的时候,可以使用CSV软件(Excel, WPS表格等)进行进一步处理
- 在进行正式的下载之前,请先确保您的电脑中拥有着较新的Python解释器(3.6以上版本均可),pip和virtualenv工具。
python -m pip install --upgrade pip
pip install virtualenv
- 首先获取整个项目:
git clone [email protected]:Sh-Zh-7/WHU-bkjw-crawler.git
- 为了避免污染您的package库,我们强烈推荐使用虚拟环境进行安装,另外由于tensorflow较大且国内的网络问题,下载依赖可能时间比较长,这里推荐开启VPN下载:
::Windows 用户
cd WHU-bkjw-crawler
virtualenv .env
./.env/Scripts/activate.bat
pip install -r requirements.txt
# Linux和Mac用户
cd WHU-bkjw-crawler
virtualenv .env
source ./.env/bin/activate
pip install -r requirements.txt
- 使用完毕后别忘记退出虚拟环境:
deactivate
帮助文档:
usage: spider.py [-h][-A] [-Y Y][-C C] [-K {GB,GX,ZB,ZX,B,X}][-S | -G | -W | -T | --print] [--clear]
您的教务系统助手
optional arguments:
-h, --help show this help message and exit
-A 查询所有的课程
-Y Y 查询某一学年的课程
-C C 按照课程名称查找
-K {GB,GX,ZB,ZX,B,X} 按照课程的种类查找
-S 查询课程的平均分
-G 查询GPA
-W 查询以学分为权的平均分
-T 查询总学分
--print 打印选中课程信息
--clear 删除所有本地存储
其中,-K的各个选项分别代表着:
- GB:公共必修课
- GX:公共选修课
- ZB:专业必修课
- ZX:专业选修课
- B: 所有必修课
- X: 所有选修课
下面展示比较常用的几种命令:
- 查看帮助文档:
python spider.py –-help
- 查看某一个课程的信息(以高等数学为例):
python spider.py -C 高等数学
- 查看所有课程的GPA:
python spider.py -A -G
- 查看必修课的加权平均分(以学分为权):
python spider.py -K B -W
- 查看专选课的总学分:
python spider.py -K ZX -T
这个爬虫程序还支持更加强大的命令行参数组合功能,比如如果您想查询2018学年必修课的加权平均分:
python spider.py -Y 2018 -K B -W
Q1:为什么我输入了密码,但是却不显示?
A1: 这是因为本程序使用Unix风格的命令行密码输入,看不到你的密码是为了保护你的隐私。虽然你在前台看不到,但是实际上是能接收到你的密码的。
Q2:如何修改用户名和密码?
A2: 在程序要求输入用户名和密码以后,这两者都会存在user_info.json里面。如果你输错了用户名和密码,可以直接在user_info.json里面修改。或者,您可以直接执行python spider.py --clear
删除user_info.json,并再次在进程中输入您的新用户名和密码。
Q3:出现了意料之外的错误怎么办?
A3: 截图,到此链接提issue。另外,错误可能分为两种:
- 第一种是登录时候的错误,这种错误可能是网络连接或者验证码识别的问题,重新执行相同的命令即可。
- 第二种错误是查询结果的错误,当你发现查询结果和自己的计算不一致,请立刻联系开发人员。
Q4: 为什么不直接爬取csv文件?而要同时爬取html和csv?
A4: 爬取html是因为bs4的html.parser引擎性能更好。爬取csv是为了给予用户更多选择。
WHU 2018级CS本科 , 谭瑞锋同学的验证码自动识别支持。
Copyright (c) 2020 sh-zh-7