# 选课系统web-vue **Repository Path**: fl1906249647/web-vue ## Basic Information - **Project Name**: 选课系统web-vue - **Description**: No description available - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-18 - **Last Updated**: 2022-07-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 特此声明 >本教务系统微服务,数据来源于爬取武汉学院教务系统,爬取数据只用于学习,实践爬虫实践课,并无它用,如若造成学校教务系统不必要的麻烦,请致信我们 >qq邮箱:<281339028@qq.com> ### 本微服务实现流程 #### 流程图 ![image.png](https://s2.loli.net/2022/03/11/uML4dawQBxlrRJm.png) #### 具体实现 + 首先通过抓包抓取相应接口,如登录接口 + 然后分析每个接口所需要的参数,以及cookie + 然后研究各个接口返回的body,通过正则,以及cheerio解析html,获取所需要的数据 + 最后生成后台接口供前端请求渲染 + 这里我们还进行了接口整合,由于爬虫是由node.js写的,我们后端是用java写的,所已我们后端人员还进行了接口整合与封装 #### 所用工具 > node.js >> Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具! Node.js 在浏览器之外运行 V8 JavaScript 引擎(Google Chrome 的内核)。 这使得 Node.js 的性能非常好 >cheerio >>cheerio是jquery核心功能的一个快速灵活而又简洁的实现,主要是为了用在服务器端需要对DOM进行操作的地方,用来配合nodejs来爬虫真的感觉绝配 >Express >>本次使用的node后台框架为Express,Express 是一个Node.js的基础框架,主要基于 Connect 中间件,并且自身封装了路由(需要配合bodyParser)、视图处理等功能,使用人数众多,使用 Express 可以快速地搭建一个完整功能的网站 #### 过程遇到的问题 ##### 教务系统登录加密方式 > 在准备爬取中,我们首先就是要完成登录流程,一般登录都会进行用户名,密码表单加密进行请求,这里我们就要知道教务系统的加密方式 * 首先我们通过抓包获取登录接口所需要的参数,如下图可以看出密码通过特殊加密方式加密请求 ![image.png](https://s2.loli.net/2022/03/12/1X5zwLb2tgvcEkn.png) * 在这里我们又不知从何下手,开始认为他们用的是常见的MD5加密方式,然后经过尝试解密,结果不是这种加密,然后只能通过学校服务器返回的关于登录的js文件中,从中我们可以慢慢研究出密码的加密方式 * 经过长时间研究,大概花了一天时间把,总算在登录有关的js文件中找出点线索 ![image.png](https://s2.loli.net/2022/03/12/k8CauZtPxVFIU6w.png) ![image.png](https://s2.loli.net/2022/03/12/4yE6KXseRUxiTrM.png) 从这两处源代码可以大概初步判定,学校教务系统用的是`RSA加密算法`,其中几个参数尤为重要 `RSA加密`:https://baike.baidu.com/item/RSA > public_exponent 公钥指数 > modulus 模数 >>我们通过百度可以查到RSA加密算法是通过`公钥加密`,`私钥解密`,我上面指出的两个参数就刚好可以生成一个公钥,所以我就初步判定教务系统密码加密方式为`RSA加密` * 之后又开始研究源代码,这里的细节就不用再多展示了,就放一张结果展示图 ![image.png](https://s2.loli.net/2022/03/12/IlLxWNhyrg9Ocn3.png) * 成功了解教务系统登录密码加密方式后,我又试着研究了一下我们图书馆登录加密方式,它跟教务系统加密方式不一样,采取的是`DES加密算法` `DES加密算法`:https://baike.baidu.com/item/DES/210508 感兴趣的同学可以自行研究一下 ##### 课表的爬取 > 在课表爬取这一块我也是花啦很长的时间完成,大概也有一天时间,其中之所以麻烦是因为课表数据并不像成绩一样在body里,而是在JavaScript里面,这就意味这我就不能使用前面所说的`cheerio`来通过类名、id解析文本,只能通过正则来匹配截取,由于本人正则使用的也不是非常的得心应手,所以花了很长的时间来完成课表的爬取与展示 #### 总结 > 在完成本次的教务系统微服务的过程中,使本人收获了诸多,比如爬虫模拟登录的全部流程,熟悉了诸多的加密算法,如`RSA`、`DES`、`MD5`.....,更加熟悉掌握了正则表达式,以及nodejs的后端基本框架express,算是一次满满的收获 ##### 友情连接 > 后端接口二次整合`风离` > 本人博客`FFLOVE`https://sucaihua.gitee.io/fflove-blog/