Об этом проекте

## Обзор 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.