Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/juzi214032/cqupt-sdk

:crab: 重庆邮电大学-爬虫库
https://github.com/juzi214032/cqupt-sdk

cqupt

Last synced: about 1 month ago
JSON representation

:crab: 重庆邮电大学-爬虫库

Awesome Lists containing this project

README

        

# 重庆邮电大学-教务在线-爬虫库

---

## 1. 简介

这是一个爬取重庆邮电大学**教务在线**数据的工具库,这个库可以支撑你开发属于你自己的校园应用,不再让项目终止于**无法获取校园数据**这个问题上。

本工具基于Jsoup实现爬虫逻辑,主要有如下特色点:

- **重试机制**

基于教务在线偶尔不稳定(并发达到100以上就会500)以及你所使用的内网外入代理不稳定的原因,该爬虫引入了http请求重试机制,一次http请求失败(大多数是连接超时),爬虫会在达到最大重试次数之前自动重新连接(重试次数可自定义配置)

- **缓存机制**

在抓取某些数据时,需要先用用户的账号密码登录教务在线,此时如果没有保存用户已登录后的cookie,会在每次抓取这些数据之前都执行一次登录操作,造成不必要的耗时。所以该爬虫使用Ehcahce来将用户已经登录后的cookie保存起来,供下次抓取用户数据的时候使用,默认失效时间30分钟。
## 2. 快速入门

1. Maven引入依赖

```xml

com.juzi.cqupt
cqupt-sdk-jwzx
1.0.0

```

2. 普通项目使用Demo

```java
// 创建配置对象
// 构造参数为true,则用内网访问教务在线,此时该代码必须运行于内网环境
// 构造参数为false,则用内网访问教务在线,此时该代码必须运行于外网环境
JwzxSimpleConfig jwzxSimpleConfig = new JwzxSimpleConfig(false);
jwzxSimpleConfig
// 设置一个内置账号密码,用于抓取学生照片
.setUsername("你的账号")
.setPassword("你的密码")
// 设置外网访问教务在线地址
.setDomainOut("http://jwzx.cqupt.juzibiji.top");

// 基础服务
JwzxService jwzxService = new JwzxServiceImpl(jwzxConfig);

// 根据你想要的功能创建不同Service
// 这里以抓取课表为例
JwzxCourseTableService jwzxCourseTableService = new JwzxCourseTableServiceImpl(jwzxService);

// 抓取课表
List studentCourseTable = jwzxCourseTableService.getStudentCourseTable("目标学号");
```

3. Springboot/Spring 使用 Demo

```java
package com.juzi.cyzs.config;

import com.juzi.jwzx.api.*;
import com.juzi.jwzx.api.impl.*;
import com.juzi.jwzx.config.JwzxSimpleConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* 爬虫配置
*
* @author Juzi
* @date 2019/9/21 18:54
* Blog https://juzibiji.top
*/
@Configuration
public class CquptSdkConfig {

/**
* @return 基础服务
*/
@Bean
public JwzxService jwzxService() {
JwzxSimpleConfig jwzxSimpleConfig = new JwzxSimpleConfig(false);
jwzxSimpleConfig.setDomainOut("http://jwzx.cqu.pt");
return new JwzxServiceImpl(jwzxSimpleConfig);
}

/**
* 课表
*
* @return
*/
@Bean
public JwzxCourseTableService jwzxCourseTableService() {
return new JwzxCourseTableServiceImpl(this.jwzxService());
}

/**
* @return 学生信息
*/
@Bean
public JwzxStudentInfoService jwzxStudentInfoService() {
return new JwzxStudentInfoServiceImpl(this.jwzxService());
}

/**
* @return 日期
*/
@Bean
public JwzxDateService jwzxDateService() {
return new JwzxDateServiceImpl(this.jwzxService());
}

/**
* @return 教师信息
*/
@Bean
public JwzxTeacherInfoService jwzxTeacherInfoService() {
return new JwzxTeacherInfoServiceImpl(this.jwzxService());
}

/**
* @return 成绩服务
*/
@Bean
public JwzxGradeService jwzxGradeService() {
return new JwzxGradeServiceImpl(this.jwzxService());
}
}
```

## 3. 已完成接口

| 模块名称 | Service名称 | 数据接口 |
| :-------- | :----------- | :-------- |
| 基础服务 | JwzxService | 1. 登录 |
| 教室信息 | JwzxClassroomInfoService | 1. 空教室
2. 教室列表 |
| 学院信息 | JwzxCollegeInfoService | 1. 学院列表 |
| 教材信息 | JwzxCourseBookService | 1. 教材列表 |
| 课表信息 | JwzxCourseTableService | 1. 学生课表
2.教师课表 |
| 日期信息 | JwzxDateService | 1. 获取当前周次
2. 计算指定日期是第几周周几
3. 获取第一周周一的年月日
4. 获取每周每天对应的日期 |
| 成绩信息 | JwzxGradeService | 1. 获取成绩总表
2. 获取平时成绩
3. 获取期末成绩
4. 获取补考成绩
5. 获取GPA |
| 教务在线新闻 | JwzxNewsService | 1. 获取新闻列表
2. 获取新闻详情 |
| 学生信息 | JwzxStudentInfoService | 1. 学生基本信息
2. 学生扩展信息
3. 教学班学生列表
4. 学生照片 |
| 教师信息 | JwzxTeacherInfoService | 1. 获取教师信息 |