Асинхронний парсер вакансій з robota.ua з Telegram ботом для керування та сповіщень.
- Автоматичне сканування вакансій за ключовими словами
- Сповіщення про нові вакансії в Telegram
- Керування парсером через Telegram команди
- Збереження даних у JSONL, CSV та SQLite
- Retry механізм з exponential backoff
- Підтримка проксі
- Ротація логів
- Python 3.12
- aiohttp
- aiogram
- beautifulsoup4 + lxml
- tenacity
- python-dotenv
- sqlite3
RobotauaParser/
├── bot/
│ ├── bot.py # ініціалізація бота
│ ├── filters.py # фільтр доступу
│ ├── handlers.py # обробники команд
│ └── notifier.py # відправка сповіщень
├── core/
│ └── state.py # глобальний стан
├── parser/
│ ├── scanner.py # логіка парсингу
│ └── storage.py # збереження даних
├── data/ # вихідні файли (не в git)
├── config.py
├── main.py
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
Створіть файл .env на основі .env.example:
BOT_TOKEN=your_telegram_bot_token
CHAT_IDS=123456789,987654321
SCAN_INTERVAL=15
KEYWORDS=Python,Django,FastAPI
PROXIES= # через кому, можна залишити пустим| Команда | Опис |
|---|---|
/start |
Запустити парсер |
/stop |
Зупинити парсер |
/status |
Статус та статистика |
/add <слово> |
Додати ключове слово |
/remove <слово> |
Видалити ключове слово |
/interval <сек> |
Змінити інтервал сканування |
/shutdown |
Вимкнути бота |
git clone https://github.com/mkhl941/RobotauaParser.git
cd RobotauaParser
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
pip install -r requirements.txt
python main.py# Збірка і запуск
docker-compose up
# Зупинка
docker-compose down
# Перезапуск
docker-compose restart| Файл | Опис |
|---|---|
data/output.jsonl |
Вакансії у форматі JSONL |
data/output.csv |
Вакансії у форматі CSV |
data/jobdatabase.db |
SQLite база для дедублікації |
data/parser.log |
Логи роботи парсера |
data/settings.json |
Збережені налаштування |
{
"source": "robota.ua",
"external_id": "12345",
"data": {
"title": "Python Developer",
"href": "https://robota.ua/company123/vacancy12345",
"description": "...",
"category": "IT",
"location": "Київ / Хрещатик, 1",
"salary": 5000,
"contact_raw": "+380991234567",
"published_at": "2026-02-20T10:00:00"
},
"metadata": {
"scanned_at": "2026-02-20T10:00:01"
}
}