Реалізація планувальника скрейпінгу за розкладом
Одноразовий запуск парсера — це інструмент. Парсер за розкладом — це система. Потрібно забезпечити регулярний запуск, логування результатів, алерти при збоях та можливість керування завданнями без правки коду.
Варіанти реалізації
Cron (Linux crontab) — найпростіший варіант для невеликої кількості завдань:
# Запуск парсера кожні 4 години
0 */4 * * * /usr/bin/python3 /opt/scrapers/catalog_spider.py >> /var/log/scraper.log 2>&1
Мінус: немає історії запусків, немає UI, складно керувати при десятках завдань.
Celery Beat — вибір для Python-проектів:
# celery_config.py
from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
'parse-catalog': {
'task': 'scrapers.tasks.run_catalog_parser',
'schedule': crontab(hour='*/4'),
'options': {'queue': 'scraping'}
},
'parse-prices': {
'task': 'scrapers.tasks.run_price_parser',
'schedule': crontab(minute=0, hour=6),
},
}
Історія запусків через django-celery-results або flower для моніторингу.
Node.js: node-cron / Agenda
const Agenda = require('agenda');
const agenda = new Agenda({ db: { address: MONGODB_URI } });
agenda.define('parse catalog', async job => {
const { sourceUrl } = job.attrs.data;
await runCatalogScraper(sourceUrl);
});
await agenda.every('4 hours', 'parse catalog', { sourceUrl: 'https://...' });
Agenda зберігає завдання в MongoDB, підтримує повторні спроби при збої, пріоритети та блокування.
Що повинен умітиати планувальник
- Запуск за розкладом (cron-вираз або інтервал)
- Паралельний запуск кількох завдань з обмеженням паралелізму
- Автоматичний повтор при помилці (з експоненціальною затримкою)
- Алерт у Telegram/Slack при перевищенні порогу помилок
- Зберігання історії: коли запускалось, скільки записів зібрано, помилки
Час реалізації планувальника на Celery Beat з історією та алертами: 2–3 робочі дні.







