CSUFT教务处爬虫项目 后端处理
前言
之前说到爬到数据如何处理登录态,总不能每次想获取数据都模拟登陆一次再获取数据分析,那我们的客户端等待我们的服务端响应时间就太久了
解决思路
由于我们模拟的客户端请求教务处都会存在一个唯一session或者说cookie,那么我们可以记录这个状态,在你的服务端和你的客户端的cookie和session中,那么每次请求我们就可以识别到是哪个用户。
在项目如何高效地处理数据是爬虫项目的重点,因为不同接口你可能会复用一些数据或者方法,我们不可能不同的接口都去爬取一次,然后利用不同的数据分析方法来进行统计筛选,整个项目我们要遵守爬虫请求次数尽可能的少,爬取数据尽可能的全的原则。做到复用性强,高性能。
以成绩为例,想要拿到成绩列表以及成绩统计(GPA\APF) 数据,我们就需要先获取成绩列表(封装成方法),再利用返回列表的方法逐个分析数据并统计,最后构建一个响应集合体,这样我们返回的数据就是通过一次数据请求完成的。
//Grade实体类
@Data
public class Grade {
/**
* 序号
*/
private Integer id;
/**
* 开课学期
*/
private String term;
/**
* 课程名称
*/
private String courseName;
/**
* 课程成绩
*/
private String grade;
/**
* 课程学分
*/
private Double credit;
/**
* 单科绩点
*/
private Double gradePoint;
/**
* 课程属性 公选 必修
*/
private String attribute;
/**
* 正常 0 补考 1 考试方式
*/
private Integer status;
}
//Grade分析实体类
@Data
public class GradeAnalysisInfo {
/**
*学号
*/
private String sid ;
/**
* 按学期来 的分析列表
*/
private List<GradeAnalysis> termList ;
/**
* 按学期来 的分析列表
*/
private List<GradeAnalysis> yearList ;
/**
* 按年份来的 分析列表
*/
/**
* 已获学分
*/
private Double allCredit;
/**
* 所有gpa
*/
private Double allGpa;
/**
* 所有Apf
*/
private Double allApf;
}
其它业务实体类也是一样的
同时在业务层面一定要注意使用全局错误响应拦截器(最好自己定义错误异常类,便于自行抛出),这利用了Spring AOC的特性,能够有效防止服务端错误信息泄露给前端,这一技术是从yupi那学到的,感觉非常有帮助。
最后
正如之前所说,项目的整体逻辑还是很简单的,注意细节的处理,开发起来很容易上手。但要想追求极致的视觉体验,还得好好应用前端技术,整个项目我使用Ant Design Pro构建,前端源码可在 CsuftSpiderFront 查看。
后端源码和实现展示可在CsuftSpiderBackend查看。
爬虫思路博客可查看 这篇文章 Java爬虫思路。
服务器连接内网可以 查看这篇文章 Docker运行Easyconnect