Реализация планировщика парсинга по расписанию
Одноразовый запуск парсера — это инструмент. Парсер по расписанию — это система. Нужно обеспечить регулярный запуск, логирование результатов, алерты при сбоях и возможность управления задачами без правки кода.
Варианты реализации
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 рабочих дня.







