之前写了爬取教务系统的代码,前端不想动了,放在 GitHub 上谁需要就拿吧。写得非常烂,多包涵,毕竟寒假才开始学😂。
项目概述#
学生信息系统是一个基于微服务架构的应用程序,旨在提供学生信息管理的完整解决方案。系统通过爬虫技术从学校教务系统获取数据,并提供统一的 API 接口供前端或其他系统调用。
本系统采用分布式微服务架构,每个服务负责特定的功能域,通过 API 网关统一对外提供服务。系统使用 JWT 进行身份验证和授权,确保数据安全和用户隐私。
系统架构#
系统由以下六个主要微服务组成:
1. 认证服务 (AuthService)#
负责用户认证和授权管理,是系统安全的核心组件。
主要功能:
-
用户登录验证
-
JWT 令牌生成与管理
-
令牌验证与刷新
-
浏览器自动化登录实现
核心组件:
-
LoginService
: 处理用户登录请求,生成 JWT 令牌 -
BrowserManager
: 管理 Playwright 浏览器实例,实现自动化登录
2. 公共库 (Common)#
包含所有服务共享的组件,确保代码复用和一致性。
主要内容:
-
数据模型 (Models):定义系统中使用的数据结构
-
中间件 (Middleware):如 API 安全中间件
-
过滤器 (Filters):如年份限制过滤器
-
通用服务 (Services):如登录服务、解析服务等
-
工具类:提供通用功能
核心组件:
-
AuthModels
: 定义认证相关的数据模型 -
StudentInfoParser
: 解析学生信息 HTML -
GradeParser
: 解析成绩信息 HTML -
ScheduleParserService
: 解析课表信息 HTML
3. API 网关 (Gateway)#
作为系统的统一入口,负责请求路由和负载均衡。
主要功能:
-
请求路由:将请求转发到相应的微服务
-
API 聚合:组合多个服务的结果
-
跨域资源共享 (CORS):处理前端跨域请求
-
请求限流:防止服务过载
技术实现:
-
使用 YARP 作为反向代理
-
集成 JWT 认证
-
配置化路由规则
4. 成绩服务 (GradeService)#
负责获取和管理学生成绩信息。
主要功能:
-
查询学生历史成绩
-
成绩统计与分析
-
成绩数据爬取与解析
核心组件:
-
GradeService
: 处理成绩查询请求 -
GradeParser
: 解析成绩 HTML 数据
5. 课表服务 (ScheduleService)#
负责获取和管理学生课表信息。
主要功能:
-
查询当前学期课表
-
按学年学期查询历史课表
-
课表数据爬取与解析
-
课表格式化输出
核心组件:
-
CourseScheduleService
: 处理课表查询请求 -
ScheduleParserService
: 解析课表 HTML 数据
6. 学生信息服务 (StudentService)#
负责获取和管理学生基本信息。
主要功能:
-
学籍信息查询
-
个人信息查询
-
联系方式查询
-
学生信息爬取与解析
核心组件:
-
StudentInfoService
: 处理学生信息查询请求 -
StudentInfoCrawlerService
: 爬取学生信息 -
StudentInfoParser
: 解析学生信息 HTML 数据
技术栈#
-
后端框架: ASP.NET Core 8.0
-
认证授权: JWT (JSON Web Token)
-
API 文档: Swagger
-
浏览器自动化: Microsoft Playwright
-
HTML 解析: HtmlAgilityPack
-
API 网关: YARP
-
日志记录: 内置.NET 日志系统
-
依赖注入: 内置.NET DI 容器
-
HTTP 客户端: HttpClient
系统工作流程#
- 用户认证流程:
- 用户通过 Gateway 发送登录请求到 AuthService
- AuthService 使用 Playwright 模拟浏览器登录教务系统
- 验证成功后生成 JWT 令牌返回给用户
- 用户后续请求携带 JWT 令牌访问其他服务
- 数据获取流程:
- 用户携带 JWT 令牌请求特定服务 (成绩 / 课表 / 学生信息)
- 服务验证令牌有效性
- 服务使用 Playwright 爬虫从教务系统获取数据
- 使用专用解析器解析 HTML 数据
- 将解析后的数据返回给用户
- 服务间通信:
- 服务之间通过 HTTP API 进行通信
- 共享数据模型确保数据一致性
- 使用依赖注入管理服务依赖
环境要求#
-
.NET SDK: 8.0
-
操作系统: Windows/macOS/Linux (支持.NET 8.0 的任何系统)
-
内存: 至少 2GB RAM (推荐 4GB 以上)
-
存储: 至少 1GB 可用空间
-
网络: 稳定的互联网连接
安装与配置#
前提条件#
- 安装.NET 8.0 SDK
# 检查是否已安装
dotnet --version
- 安装 Playywright
dotnet tool install --global Microsoft.Playwright.CLI
playwright install
- 克隆仓库
git clone https://github.com/ExXTong/StudentInfoSystem
cd StudentInfoSystem
配置服务#
每个服务都有自己的 appsettings.json 配置文件,需要根据实际环境进行配置:
JWT 配置
{
"Jwt": {
"Secret": "your_secret_key",
"Expiration": "12:00:00"
}
}
构建与运行#
构建项目#
dotnet restore
dotnet build
运行服务#
需要按照依赖顺序启动各个服务,当然需要开多个终端:
-
启动认证服务
cd StudentInfoSystem.AuthService
dotnet run
- 启动学生信息服务
cd StudentInfoSystem.StudentService
dotnet run
- 启动成绩服务
cd StudentInfoSystem.GradeService
dotnet run
- 启动课表服务
cd StudentInfoSystem.ScheduleService
dotnet run
- 启动 API 网关
cd StudentInfoSystem.Gateway
dotnet run
API 文档#
服务启动后,可以通过以下 URL 访问各服务的 Swagger 文档:
-
学生信息服务: http://localhost:5002/swagger
-
API 网关: http://localhost:5000/swagger
记得使用 https 以及关闭不必要的端口。