Об этом проекте
## Обзор
Hospital-Recruit-QA-Bot — это автоматизированный конвейер с точки зрения QA, который каждое утро автоматически собирает объявления о найме из 42 основных больниц Кореи и проверяет целостность собранных данных. Система ориентирована не просто на краулинг, а на структуру со шлюзом проверки, чтобы в конечный результат попадали только надежные данные.
## Основные функции
### 1. Шлюз проверки RaiT
- Проверка пропущенных значений и ошибок формата в собранных сырых данных в режиме реального времени на основе фреймворка RaiT (Responsible AI Testing).
- Только объявления, прошедшие проверку (PASS), включаются в конечный результат и регистрируются в `seen_posts`, что предотвращает попадание непригодных данных в отчет.
### 2. CI/CD конвейер (GitHub Actions)
- Автоматический запуск ежедневно в 9:00 (KST) в виртуальной среде Ubuntu.
- После краулинга бот самостоятельно фиксирует (commit) и отправляет (push) обновленный файл `seen_posts.csv`, чтобы постоянно предотвращать дублирование сбора.
### 3. Фильтрация дубликатов
- Локальная и облачная среды используют общую базу истории (`seen_posts.csv`), поэтому в отчет попадают только новые объявления, исключая уже проверенные.
## Сценарии QA-тестирования
В README представлены следующие тест-кейсы:
| ID | Пункт тестирования | Ожидаемый результат | Статус |
|---|---|---|---|
| TC-01 | Проверка валидности данных RaiT | Автоматическое определение пропусков и ошибок формата с помощью логики `verify_rait_compliance` | Pass |
| TC-02 | Защита целостности данных | Только новые данные со статусом PASS отражаются в списке предотвращения дубликатов | Pass |
| TC-03 | Раздельное сохранение отчетов | Создание Excel-файла с разделением данных на листы: Все / Новые / RaiT_FAIL | Pass |
| TC-04 | Доступ к 42 целевым больницам | Проверка нормального доступа и парсинга данных с целевых сайтов, за исключением заблокированных по соображениям безопасности | Pass |
## Рабочий процесс
1. **Триггер:** Автоматический запуск планировщика GitHub Actions ежедневно в 9:00 (KST).
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` был уточнен для разделения исходного кода и выходных данных.
## Известные ограничения
- Доступ к больнице Samsung Changwon заблокирован в среде GitHub Actions (Ubuntu/зарубежные IP) из-за усиленной политики безопасности. Если данные этой больницы необходимы, рекомендуется запускать процесс локально; в CI/CD конвейере эта цель настроена на автоматический пропуск для обеспечения стабильности.
## Планы на будущее
- Внедрение Pytest для автоматизации модульного и интеграционного тестирования.
- Усовершенствование многомерной логики проверки для определения контекстных ошибок и текстовой согласованности.
- Интеграция уведомлений через Slack/Email для автоматической рассылки результатов и отчетов RaiT FAIL.
## Лицензия и примечания
Проект распространяется под лицензией MIT. В README указано, что данный проект создан для повышения личных технических навыков и в качестве портфолио, и коммерческое использование собранной информации запрещено. Авторские права на информацию о найме принадлежат каждой больнице, и репозиторий может быть переведен в приватный режим по запросу правообладателя. Также упоминается применение задержек для минимизации нагрузки на серверы и блокировка вредоносных данных через шлюз RaiT.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.