之前寫了爬取教務系統的代碼,前端不想動了,放在 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
- 安裝 Playwright
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 以及關閉不必要的端口。