其他分享
首页 > 其他分享> > 爬取沈理教务系统,实现查成绩,自动计算绩点功能

爬取沈理教务系统,实现查成绩,自动计算绩点功能

作者:互联网

目前可以实现计算绩点的程序主要有掌上沈理和沈理NEWS。

掌上沈理是官方的APP,运行速度快。但计算绩点的公式似乎有些错误,当某科重修,乘绩点后绩点就会计算出错。

沈理NEWS通过爬取教学网实现算绩点功能,计算准确,但必须手动选择。并且由于前段时间教务系统更换了网址,沈理NEWS现已无法使用。

为了方便计算学位课绩点和学年绩点,便用python写了个算绩点的小程序,没有GUI,直接运行,输入教学网账号密码即可。
首次登录会爬取教学计划,大概需要2min的时间。爬取成功后,会将学位课信息以json文件保存到当前文件目录,请不要删除,否则会重新爬取。

整个爬取过程不算太复杂,不过过程中也有几个坑。
1、跳转到教务系统页面时,需要向服务器提交headers请求头,其中有Referer这一项,记录的是从哪个页面跳转到此页面。若headers里没有此项,页面就会跳转失败,建议爬取时把headers写全。

2、在向成绩界面提交POST数据时,需要提交viewstate,可通过浏览器开发工具获取。我尝试了一下首先用一人学号,然后提交另一人的viewstate,获取到的成绩会是提交viewstate的那一人成绩。可以先使用GET方式跳转成绩页面,通过查看源代码便可以获取viewstate。

由此可见viewstate每个人都是独一无二的,一个学号对应一个viewstate,可以将学号和获取到的viewstate提交到自己的服务器,这样便能实现无密码查成绩功能,并且只能查询成绩,无法对别的页面进行操作,这样就不用担心隐私问题。云端查询成绩,出成绩后推送消息到手机,无需占用手机资源。

3、获取学位课比较慢,原因就是学校教务系统教学计划页面反应太慢,打开一页大概需要10s的加载时间,想要爬取全信息,最少也需要加载5页教学计划。也尝试过用多进程和多线程的方法爬取,但似乎教学网并不支持,暂未发现较好的爬取方法。

4、教务系统重修成绩不会覆盖原成绩,而是新增一门成绩。重修后会显示挂了的成绩和重修后的两门成绩,在处理成绩时必须将原成绩与重修成绩合并,这样后续绩点计算才不会出错。

标签:绩点,viewstate,爬取,成绩,沈理,页面
来源: https://www.cnblogs.com/jkor/p/13755899.html