这个项目能做什么
## 概述
Hospital-Recruit-QA-Bot 是一个从 QA 视角出发的自动化流水线,每天早晨自动采集韩国 42 家主要医院的招聘公告,并验证采集数据的完整性。该项目不仅限于简单的爬虫,还通过设置验证网关,旨在确保只有可靠的数据被包含在最终结果中。
## 核心功能
### 1. RaiT 验证网关
- 基于 RaiT (Responsible AI Testing) 框架,实时验证采集到的原始数据的缺失值和格式错误。
- 只有通过验证 (PASS) 的公告才会被包含在最终结果中并注册到 `seen_posts` 中,从而防止不合格的数据混入结果。
### 2. CI/CD 流水线 (GitHub Actions)
- 每天上午 9 点 (KST) 在 Ubuntu 虚拟环境中自动执行。
- 爬取后,机器人会自动提交并推送更新后的 `seen_posts.csv`,以持续防止重复采集。
### 3. 重复数据过滤
- 本地和云端环境共享相同的历史数据库 (`seen_posts.csv`),排除已确认的公告,仅筛选并报告新公告。
## QA 验证场景
README 中整理的测试用例如下:
| ID | 测试项目 | 预期结果 | 状态 |
|---|---|---|---|
| TC-01 | RaiT 数据有效性验证 | 通过 `verify_rait_compliance` 逻辑自动判定缺失值及格式错误 | Pass |
| TC-02 | 数据完整性卫兵 | 仅将获得 PASS 判定的新数据反映在重复防止列表中 | Pass |
| TC-03 | 综合报告分路存储 | 将全部/新增/RaiT_FAIL 数据分离到独立工作表中生成 Excel | Pass |
| TC-04 | 42 家医院目标访问 | 除安全拦截网站外,确认目标网站正常访问及数据解析 | Pass |
## 工作流
1. **触发:** 每天上午 9 点 (KST) GitHub Actions 调度器自动执行
2. **采集:** 基于 Selenium 采集各医院招聘页面的动态数据
3. **QA 验证:** 通过 RaiT 逻辑进行数据完整性检查
4. **去重:** 通过比对 `seen_posts.csv` 过滤重复公告
5. **自动更新:** 将验证后的新数据自动提交并推送至存储库
6. **报告:** 将最终 Excel 结果和错误日志保存在 GitHub Artifacts 中
## 技术栈
- **语言:** Python 3.10
- **库:** Selenium, Pandas, Openpyxl, Webdriver-manager
- **自动化:** GitHub Actions (CI/CD)
- **存储:** CSV (`seen_posts.csv`) 及 Excel 产出物
## 项目结构
```text
.github/workflows/ # CI/CD 流水线配置 (crawler.yml)
top-hospitals/
├── qa/ # 各医院爬取逻辑及 RaiT 验证模块
├── main.py # 主执行引擎 (QA 网关及数据处理)
└── seen_posts.csv # 用于防止重复的历史数据库 (自动更新)
```
## 问题解决记录
- **环境间路径移植性:** 针对本地与 GitHub Actions 虚拟服务器路径差异导致的执行错误,通过基于 `os.path` 的相对路径动态生成,构建了与环境无关的执行结构。
- **数据一致性及重复管理:** 通过 `seen_posts.csv` 历史管理与 GitHub Actions 自动提交联动,解决了重复采集的问题。
- **环境隔离:** 通过精细化 `.gitignore` 将源代码与数据产出物分离。
## 已知限制
- 三星昌原医院由于加强了安全策略,在 GitHub Actions (Ubuntu/海外 IP) 环境中会被拦截。如需该医院数据,建议在本地环境直接运行;为了稳定性,CI/CD 流水线已设置为自动跳过该目标。
## 未来计划
- 引入 Pytest 实现单元/集成测试自动化
- 升级多维度验证逻辑,以判定上下文错误和文本一致性
- 联动 Slack/Email 通知,自动发送结果及 RaiT FAIL 报告
## 许可证及注意事项
遵循 MIT License。README 中明确本项目旨在提升个人技术能力及作为作品集使用,禁止将采集信息用于商业目的。招聘信息的版权归各医院所有,若原版权持有者要求,存储库可能会转为私有。项目中采用了延迟时间以最小化服务器负载,并通过 RaiT 网关拦截有害数据。
评论
0 评分人数达到10人后显示
登录后参与讨论。