Автоматизированный конвейер для сбора, очистки, фильтрации и публикации вакансий с HeadHunter в Telegram: сохранение истории, LLM‑фильтрация и генерация кратких сводок.
👉 Перейти в Telegram-канал с вакансиями
- Scrape — находит вакансии по ключевым словам (Data Science, Machine Learning, AI, Data Analytics, BI и смежные).
- Clean — нормализует данные: зарплаты, даты, навыки, убирает дубликаты и вакансии без описания.
- Filter — использует LLM (Gemini) для отбора только профильных вакансий.
- Summarize — формирует компактный JSON‑блок (О компании, Обязанности, Требования).
- Publish — отправляет вакансии в Telegram-канал с управляемыми задержками и не дублирует уже отправленные.
- History — хранит список опубликованных ссылок (
sent_links.txt) и результаты обработки (data/raw,data/processed).
├── .github/workflows/publish.yml # CI: расписание скрап + публикация
├── Dockerfile # Образ для локального и прод-режима
├── run_all.py # Запускает scraper → cleaning → publisher
├── requirements.txt # Зависимости Python
├── src/
│ ├── config.py # Переменные окружения, пути, ключевые слова
│ ├── parser.py # Поиск URL вакансий
│ ├── scraper.py # Сбор деталей страницы через Playwright
│ ├── cleaning.py # Очистка и нормализация DataFrame
│ ├── llm_summary.py # LLM‑фильтрация и summary (Gemini API)
│ └── publisher.py # Публикация в Telegram + история ссылок
└── data/
├── raw/ # Сырье: CSV по датам
├── processed/ # Очищенные CSV по датам
└── sent_links.txt # Список уже отправленных ссылок
- Расписание: два запуска в сутки (обед и вечер по Asia/Almaty) или ручной старт.
- Кэширование: сохраняет папку
data/между запусками, чтобы история ссылок и CSV сохранялась. - Установка Playwright: скачиваются browser‑зависимости для headless‑режима.
- Коммит: автоматически фиксирует новые файлы из
data/обратно в репозиторий.