Введение

В этом пошаговом гайде вы создадите рабочую систему мониторинга наличия товаров у конкурентов на маркетплейсах: настроите парсер, аккуратную обработку данных, Telegram-уведомления и запись результатов в Google Sheets. Мы разберем все этапы: от подготовки окружения до автоматического запуска по расписанию. Итогом станет устойчивый, понятный и легко поддерживаемый процесс, который можно расширять под ваши задачи.

Для кого этот гайд: для начинающих аналитиков, владельцев магазинов, продуктологов и специалистов по конкурентному анализу. Опыт программирования не обязателен, но внимательность к деталям пригодится. Мы будем шаг за шагом объяснять каждое действие и проверку.

Что нужно знать заранее: базовые действия на компьютере, умение устанавливать программы, создавать папки, работать с Google-аккаунтом. Понимание терминов вроде токен, API и HTML будет плюсом, но их мы разъясним.

Сколько времени потребуется: подготовка окружения и сервисов 60–120 минут, настройка парсера 60–120 минут, интеграции с Telegram и Google Sheets 30–60 минут, тесты и запуск по расписанию 30–60 минут. В сумме 2–6 часов с учетом проверки.

Предварительная подготовка

Необходимые инструменты и доступы: компьютер на Windows, macOS или Linux; установленный Python версии 3.10 или выше; аккаунт в Telegram; Google-аккаунт с доступом к Google Sheets; доступ к Google Cloud Console для создания сервисного аккаунта; учетная запись на маркетплейсах не нужна, мы работаем только с открытыми страницами и в рамках разрешенных правил.

Системные требования: стабильный интернет, 1 ГБ свободного места на диске, 4 ГБ оперативной памяти, актуальный браузер для авторизаций в Google.

Что скачать и установить: Python последней стабильной версии; текстовый редактор (например, любой удобный редактор кода); при необходимости инструмент планирования задач (на Windows это уже есть; на macOS и Linux доступен cron); опционально Playwright для сложных страниц с динамикой, но использовать его будем только там, где это не противоречит правилам сайта.

Создание резервных копий: если вы будете хранить результаты в пользовательских файлах или уже существующих Google Sheets, перед началом сделайте копию ваших таблиц. Это позволит откатиться в случае ошибок.

⚠️ Внимание: Мы работаем только с данными, доступными без входа и без обхода технических ограничений сайтов. Соблюдайте robots.txt, условия использования и локальное законодательство. Этот гайд не предназначен для обхода защиты или ограничений.

Базовые понятия

Ключевые термины простым языком: парсер — это программа, которая забирает страницу и достает нужные кусочки текста, например статус наличия; HTML — язык разметки страниц; CSS-селектор — способ указать, где на странице искать нужный элемент; API — программный способ получать данные, когда сайт это предусмотрел; токен — секретный ключ для доступа к API; cron или планировщик — система, которая запускает ваш скрипт по расписанию.

Основные принципы работы: мы берем список товаров и ссылок, для каждой ссылки аккуратно загружаем страницу в рамках разумной частоты запросов, находим статус наличия, нормализуем его к понятным значениям (в наличии, нет, мало), записываем результат и, при важном изменении, отправляем уведомление в Telegram. Все действия логируем.

Что важно понимать перед началом: некоторые маркетплейсы динамически подгружают данные. Если открытая статичная страница не содержит нужной информации, используйте только разрешенные механизмы (например, публичные JSON-эндпойнты, если они явно предназначены для публичного использования), либо откажитесь от данного источника. Не обходите защитные механизмы, не используйте CAPTCHA-сервисы и не маскируйтесь.

Шаг 1: Планирование, правовая проверка и сбор целевых SKU

Цель этапа

Определить, что именно вы будете мониторить, удостовериться, что это разрешено, и подготовить список товаров с URL-адресами.

Пошаговые действия

  1. Создайте таблицу требований. Впишите цель: мониторить наличие товаров конкурентов для оценки спроса и своевременного пополнения вашего склада.
  2. Соберите список товаров. Минимум 5–10 позиций. Для каждой позиции зафиксируйте: название, уникальный идентификатор товара (SKU или артикул), полную ссылку на страницу товара у конкурента.
  3. Проверьте каждую страницу вручную в браузере. Откройте в режиме инкогнито. Убедитесь, что статус наличия виден при обычной загрузке страницы без входа.
  4. Откройте robots.txt каждого домена. В адресной строке после домена добавьте /robots.txt. Проверьте, нет ли запрета на обращение к карточкам товара. Если есть запрет, исключите этот домен из мониторинга.
  5. Ознакомьтесь с условиями использования сайта. Если они запрещают автоматизированное извлечение данных, исключите этот источник.
  6. Создайте файл источников. Назовите его sources.csv. В первой строке запишите заголовки: id,site,product_name,url,selector_hint. Далее добавьте строки с данными. В поле selector_hint кратко опишите, где визуально расположен статус (например, блок рядом с кнопкой Купить).

Важные моменты

Не пытайтесь собирать данные, если это явно запрещено правилами сайта. Вы рискуете блокировкой и нарушением закона.

Совет: Для начального теста возьмите 3–5 товаров с разных сайтов и один с динамическим выводом — это поможет оценить сложность заранее.

Ожидаемый результат

У вас есть файл sources.csv со списком товаров и проверенными ссылками, которые можно анализировать без входа и без обхода защиты.

Возможные проблемы и решения

  • Нет статуса на странице: попробуйте другой товар или сайт, либо проверьте, не скрыт ли статус за всплывающим окном. Если скрыт, этот источник лучше исключить.
  • Длинные или непонятные URL: это нормально, главное, чтобы страница открывалась без авторизации.

✅ Проверка: Откройте каждую ссылку из sources.csv в режиме инкогнито. Вы должны видеть название товара и статус наличия глазами человека.

Шаг 2: Создание проекта и окружения

Цель этапа

Подготовить рабочую папку, установить Python-библиотеки и настроить конфигурационные файлы.

Пошаговые действия

  1. Создайте папку проекта. Назовите ее stock-monitor.
  2. Откройте терминал или командную строку в этой папке. На Windows используйте Поиск и введите cmd, затем команда cd путь_к_папке. На macOS или Linux откройте Terminal и перейдите командой cd путь_к_папке.
  3. Создайте виртуальное окружение Python. Выполните: python -m venv .venv
  4. Активируйте окружение. На Windows: .venv\Scripts\activate. На macOS и Linux: source .venv/bin/activate. В командной строке слева появится пометка (venv).
  5. Установите зависимости. Выполните: pip install requests beautifulsoup4 lxml tenacity python-dotenv gspread google-auth google-auth-oauthlib google-auth-httplib2
  6. Опционально для динамических страниц установите Playwright, но используйте его только там, где это разрешено: pip install playwright затем playwright install
  7. Создайте файл .env для секретов. В папке проекта создайте файл с именем .env с пустым содержимым. Мы позже добавим токены.
  8. Создайте структуру папок: data для входных и выходных CSV, logs для логов, scripts для скриптов.
  9. Переместите sources.csv в папку data.

Важные моменты

Держите токены и ключи только в .env и не добавляйте их в общедоступные места.

Совет: Если у вас несколько проектов на Python, используйте отдельные виртуальные окружения для каждого, чтобы избежать конфликтов зависимостей.

Ожидаемый результат

Создано рабочее окружение с установленными библиотеками и структурой папок, файл sources.csv находится в data.

Возможные проблемы и решения

  • Не устанавливаются пакеты: проверьте интернет и повторите установку. Если ошибка с правами, запустите терминал от имени администратора (Windows) или добавьте sudo для macOS и Linux.
  • Команда python не распознана: установите Python и при установке отметьте добавление в PATH или используйте команду python3.

✅ Проверка: Выполните команду python -V. Должна отобразиться версия Python, и из каталога проекта у вас активировано виртуальное окружение.

Шаг 3: Настройка получения данных со страницы

Цель этапа

Научиться аккуратно загружать HTML-страницу и извлекать статус наличия без обхода защиты, с повторными попытками и тайм-аутами.

Пошаговые действия

  1. Откройте редактор и создайте файл scripts/fetcher.py.
  2. Опишите стратегию: мы будем отправлять HTTP-запросы с явным указанием тайм-аута, честным идентифицирующим заголовком User-Agent и с редкими, равномерными запросами. Это снижает нагрузку на сайт и помогает соблюдать правила.
  3. Реализуйте базовую загрузку: используйте библиотеку requests. Укажите заголовок User-Agent в стиле ProductName-StockMonitor;contact=ваш_email. Установите timeout 10–20 секунд. Включите повторные попытки через tenacity с экспоненциальной паузой, максимум 3–4 попытки.
  4. Добавьте парсинг HTML: извлекайте текст страницы с помощью BeautifulSoup и lxml-парсера. На этом этапе просто верните объект страницы.
  5. Распознавание статуса: определите функцию normalize_status, которая по ключевым словам возвращает одно из трех значений: in_stock, out_of_stock, low_stock. Примеры: содержит Нет в наличии, Нет на складе, Продано — out_of_stock. Содержит В наличии, Доступно — in_stock. Содержит Осталось, Мало, Последние — low_stock.
  6. Извлечение по подсказке: используйте selector_hint из sources.csv как текстовую подсказку. Найдите на странице элементы, в которых встречаются слова В наличии, Нет в наличии, Осталось. Если на странице присутствуют разные блоки, берите блок рядом с кнопкой Купить или Добавить в корзину.
  7. Лимиты: добавьте в основной цикл паузу 2–5 секунд между запросами к одному домену. Это исключит избыточную нагрузку.

Важные моменты

Мы не используем приемы обхода защиты. Если статус наличия невозможно получить без взаимодействия со скриптами сайта, честно исключите такой источник или найдите официальные способы (например, партнерские API).

Совет: Пропишите понятный User-Agent с контактным адресом. Это сигнал добросовестности. В отдельных случаях админы сайтов идут навстречу и подсказывают безопасный способ интеграции.

Ожидаемый результат

Скрипт fetcher.py способен безопасно загрузить страницу и выделить статус наличия в виде одного из трех значений, либо вернуть None, если статус не найден или источник не подходит.

Возможные проблемы и решения

  • Бесконечная загрузка: установите явный timeout и ограничьте число попыток.
  • Статус на изображении: если вывод реализован картинкой, без официального API такой источник лучше исключить.

✅ Проверка: Запустите пробный вызов для одной страницы из sources.csv и выведите на экран статус. Вы должны увидеть in_stock, out_of_stock или low_stock.

Шаг 4: Конфигурация источников и нормализация данных

Цель этапа

Сделать так, чтобы добавление новых товаров и сайтов происходило без правки кода: все настройки в CSV и простых правилах.

Пошаговые действия

  1. Создайте файл scripts/config.py. Опишите там словари с ключевыми словами по языкам: например, ключевые слова для наличия, отсутствия и низкого остатка на русском и английском.
  2. Добавьте карту доменов, если по конкретным сайтам вы знаете устойчивые текстовые маркеры. Например, для доменов с повторяющейся версткой укажите точные фразы, которые обычно встречаются в статусах.
  3. Подготовьте data/sources.csv. Убедитесь, что каждая строка имеет уникальный id. При желании добавьте колонку threshold для низкого остатка, если сайт показывает численное значение (например, Осталось 3 штуки), чтобы определять low_stock автоматически.
  4. Добавьте в проект скрипт scripts/runner.py, который читает CSV, вызывает fetcher, нормализует статус, присваивает timestamp и записывает результат в data/results.csv с колонками: id, site, product_name, url, status, detail, checked_at.
  5. Реализуйте кэширование на время одного запуска: если несколько URL относятся к одному домену, делайте паузы между запросами и не отправляйте к одному домену более 1 запроса в 2–3 секунды.

Важные моменты

Не записывайте в результаты пустые статусы. Если парсер не смог найти статус, лучше зафиксировать reason=not_found и отдельно проверить страницу руками.

Совет: Для удобства поиска ошибок добавьте колонку parser_note, где храните короткие пометки о том, какой фрагмент текста был найден.

Ожидаемый результат

Вы можете запускать один скрипт и получать консистентный CSV с результатами для всех источников. Добавление новых товаров — это просто добавление строки в data/sources.csv.

Возможные проблемы и решения

  • Различные формулировки статуса: расширьте словарь ключевых слов в config.py.
  • Сайт меняет верстку: это нормальная ситуация. Зафиксируйте дату, когда изменения начались, и обновите правила.

✅ Проверка: Запустите runner и убедитесь, что в data/results.csv появились записи по всем товарам со статусом и временной меткой.

Шаг 5: Настройка Telegram-уведомлений

Цель этапа

Получать мгновенные уведомления, когда статус наличия меняется или достигает важного состояния.

Пошаговые действия

  1. Создайте бота. В Telegram найдите пользователя BotFather. Нажмите Start. Введите команду /newbot. Следуйте инструкциям: задайте имя и уникальный username. Сохраните полученный токен в безопасном месте.
  2. Добавьте токен в .env. Создайте строку TELEGRAM_BOT_TOKEN=ваш_токен.
  3. Определите chat_id. Напишите вашему боту любое сообщение. Далее получите свой chat_id с помощью простого запроса к Telegram API из вашего скрипта или временным тестом: выведите updates и найдите id вашего чата. Сохраните его в .env как TELEGRAM_CHAT_ID=число.
  4. Создайте файл scripts/notifier.py. Реализуйте функцию send_telegram_message, принимающую текст уведомления. Отправляйте через HTTP-запрос к Telegram Bot API. Обработайте ошибки сети, чтобы не падать при сбое Telegram.
  5. Подключите notifier в runner. Если новый статус отличается от предыдущего по тому же товару (сравнение ведите по последней записи в results.csv или по локальному JSON-журналу), отправляйте уведомление с кратким описанием: название товара, новый статус, время проверки.
  6. Сделайте настройку частоты уведомлений. Например, если сайт часто прыгает между двумя состояниями в течение часа, отправляйте сообщение не чаще одного раза в N минут для одного товара.

Важные моменты

Не перегружайте уведомлениями. Включайте их только при реальных изменениях. Для стабильного статуса достаточно периодической записи в журнал.

Совет: Сделайте единый префикс темы в сообщениях, например [StockMonitor]. Так вы легко фильтруете уведомления в Telegram.

Ожидаемый результат

При изменении статуса вы получаете понятное сообщение в Telegram. В сообщении видны товар, сайт, старый и новый статус, момент времени.

Возможные проблемы и решения

  • Бот не пишет в чат: проверьте, что вы сначала написали боту самостоятельно, иначе он не может инициировать диалог.
  • Сообщения приходят слишком часто: добавьте троттлинг по времени или фильтруйте незначимые изменения.

✅ Проверка: Сымитируйте смену статуса для любого товара (временным переопределением результата) и убедитесь, что пришло уведомление с ожидаемым текстом.

Шаг 6: Интеграция с Google Sheets

Цель этапа

Сохранять результаты проверок в таблицу Google для наглядных отчетов и совместной работы.

Пошаговые действия

  1. Создайте пустую Google-таблицу. Назовите ее Stock Monitor. На первом листе сделайте заголовок в первой строке: id, site, product_name, url, status, detail, checked_at.
  2. Откройте Google Cloud Console. Создайте проект с любым названием. В разделе APIs активируйте Google Sheets API и Google Drive API.
  3. Создайте сервисный аккаунт в разделе IAM. Назовите его stock-monitor-service. Сгенерируйте ключ в формате JSON и скачайте файл ключа на компьютер. Храните файл в папке проекта, например в credentials/service_account.json.
  4. Поделитесь таблицей с адресом сервисного аккаунта. Откройте вашу Google-таблицу и добавьте этот адрес в доступы с правом Редактор.
  5. Добавьте в .env путь к ключу и идентификатор таблицы. Например, GSHEET_KEY_PATH=credentials/service_account.json и GSHEET_SPREADSHEET_NAME=Stock Monitor.
  6. Создайте файл scripts/sheets.py. Реализуйте функции: open_sheet для подключения по ключу и записи; append_rows для добавления строк пачкой. Добавьте обработку квот: если превышение, делайте паузу и повтор.
  7. Подключите sheets из runner. После каждого запуска отправляйте в таблицу новые записи или обновляйте последнюю запись по товару. Для минимизации квот используйте батчевую вставку.

Важные моменты

Ключ сервисного аккаунта — это секрет. Не отправляйте его коллегам по мессенджерам и не храните в публичных местах. Всегда используйте .env и права доступа по минимуму.

Совет: Для устойчивости добавьте локальный кэш: сначала пишите в data/results.csv, а затем синхронизируйте пачками в Sheets, чтобы не потерять данные при кратковременных сбоях сети.

Ожидаемый результат

Записи из результатов мониторинга появляются в Google Sheets. Вы можете строить фильтры и сводные таблицы, сравнивая динамику статусов.

Возможные проблемы и решения

  • Ошибка прав доступа: проверьте, что сервисный аккаунт добавлен в список пользователей таблицы и имеет права Редактор.
  • Превышение квоты: уменьшите частоту операций записи и используйте батчи.

✅ Проверка: Запустите runner и затем обновите лист. Должны появиться новые строки. Сверьте столбцы и значения.

Шаг 7: Планировщик и автоматический запуск

Цель этапа

Автоматически запускать мониторинг по расписанию без вашего участия.

Пошаговые действия

  1. Создайте файл запуска scripts/main.py, который последовательно вызывает runner, записывает результаты и, при изменениях, отправляет Telegram-уведомления. Добавьте логирование в logs/stock-monitor.log: при каждом запуске логируйте время, количество успешно обработанных товаров, количество ошибок.
  2. Windows Task Scheduler: откройте Планировщик заданий. Создайте базовую задачу. Задайте имя StockMonitor. Триггер По расписанию, например каждый час. Действие Запуск программы. Укажите путь к интерпретатору Python из вашего виртуального окружения и аргумент путь к scripts/main.py. В Пуск в укажите папку проекта. Сохраните.
  3. macOS и Linux cron: откройте crontab. Добавьте строку запуска каждый час с активацией окружения и вызовом main.py. Убедитесь, что пути к Python и проекту указанны верно.
  4. Проверьте права доступа и условия среды. При необходимости установите переменные окружения TELEGRAM_BOT_TOKEN и другие в системных настройках или используйте .env.
  5. Сделайте тестовый запуск из планировщика: временно увеличьте частоту до каждые 5–10 минут, проверьте, что новые записи появляются в таблице и сообщение приходит в Telegram при изменении статуса.

Важные моменты

Следите за логами. Это лучшая точка для диагностики, если что-то пошло не так ночью.

Совет: Введите ограничение времени исполнения, например не более 10 минут за запуск, чтобы задачи не наползали друг на друга при редких зависаниях.

Ожидаемый результат

Мониторинг запускается по расписанию, записывает результаты и отправляет уведомления при изменениях. Логи отражают стабильность работы.

Возможные проблемы и решения

  • Скрипт не находит интерпретатор: пропишите полный путь к Python в планировщике.
  • .env не подхватывается: укажите загрузку .env в начале main.py или установите переменные в системном окружении.

✅ Проверка: Откройте логи. Должна быть запись о запуске по расписанию и корректном завершении. В Google Sheets появились новые строки, а при изменении статуса пришло сообщение в Telegram.

Шаг 8: Сетевые настройки и работа с прокси без нарушения правил

Цель этапа

Сделать сетевую часть устойчивой и управляемой, не нарушая условия использования сайтов.

Пошаговые действия

  1. Настройте тайм-ауты. Для каждого запроса используйте разумные значения, например timeout 15 секунд подключения и 30 секунд чтения.
  2. Включите повторные попытки с экспоненциальной паузой и ограничением по времени. Это уменьшит ложные ошибки сети без увеличения нагрузки.
  3. Добавьте честный User-Agent с информацией о контакте. Пример: ProductName-StockMonitor;contact=ваш_email. Это повышает прозрачность.
  4. При необходимости используйте прокси. Укажите один корпоративный или проверенный провайдер, чтобы стабилизировать маршрутизацию. Пропишите в .env переменную HTTP_PROXY или HTTPS_PROXY. Используйте прокси только там, где это не противоречит правилам сайта, законодательству и вашим договорам.
  5. Не применяйте механики обхода блокировок. Не используйте CAPTCHA-сервисы, не маскируйте поведение как браузер, не имитируйте человека. Если сайт ограничивает автоматизированный доступ, исключите его из мониторинга.
  6. Включите ограничение частоты запросов. Норма: не чаще 1 запроса в 2–3 секунды к одному домену. При большем списке разнесите запросы по времени.

Важные моменты

⚠️ Внимание: Массовая ротация IP-адресов для обхода ограничений или блокировок — недопустима. Этот гайд не содержит и не рекомендует такие практики. Используйте только легальные и согласованные каналы доступа к данным.

Совет: Если вам нужна доступность с конкретной локацией, рассмотрите размещение вашего кода в дата-центре нужного региона, а не ротацию IP. Это проще и прозрачнее.

Ожидаемый результат

Ваши запросы стабильны, не вызывают избыточной нагрузки и не нарушают правила источников.

Возможные проблемы и решения

  • Периодические сетевые ошибки: увеличьте паузы, включите повторные попытки, используйте один надежный прокси при необходимости.
  • Запросы блокируются: проверьте robots.txt и условия сайта. Если автоматизированный доступ запрещен, удалите источник из списка.

✅ Проверка: Запустите несколько циклов мониторинга подряд и убедитесь, что доля ошибок сети не превышает 1–2 процента, а среднее время ответа стабильно.

Шаг 9: Журналирование, контроль изменений и качество данных

Цель этапа

Гарантировать, что каждый запуск оставляет отчетный след, а изменения статусов отслеживаются корректно.

Пошаговые действия

  1. Добавьте лог-файл logs/stock-monitor.log. Логируйте старт, количество URL, суммарные успехи и ошибки, длительность, список товаров с изменениями.
  2. Ведите локальный журнал последних статусов в data/last_status.json. При запуске сравнивайте новый статус с предыдущим и решайте, отправлять уведомление или нет.
  3. Проверяйте валидацию входных данных. Если в sources.csv отсутствует url или id, логируйте ошибку и пропускайте строку.
  4. Стандартизируйте статус. Допускайте только три значения: in_stock, out_of_stock, low_stock. Все остальное — reason и детали.
  5. Снимайте метки времени в UTC, чтобы избежать путаницы с часовыми поясами при анализе в Google Sheets.

Важные моменты

Строгая типизация и валидация входных данных минимизируют редкие, но болезненные ошибки.

Совет: Добавьте контроль качества: если доля not_found по сайту превысила порог, отправляйте единичное предупреждение в Telegram с просьбой проверить верстку.

Ожидаемый результат

Система аккуратно фиксирует каждый запуск, любые изменения статусов и потенциальные аномалии качества данных.

Возможные проблемы и решения

  • Случайные ложные изменения: введите правило минимальной длительности статуса, например считать изменение значимым, если оно держится два запуска подряд.
  • Разгон log-файлов: включите ротацию логов раз в неделю и храните не более четырех архивов.

✅ Проверка: Смоделируйте изменение статуса, убедитесь, что оно попало в last_status.json, пришло уведомление и запись сделана в таблицу.

Проверка результата

Чек-лист

  • Есть файл sources.csv с корректными ссылками и подсказками.
  • Окружение Python создано, зависимости установлены.
  • Парсер извлекает статус по каждой ссылке и нормализует его.
  • Google Sheets получает новые строки после запуска.
  • Telegram-бот присылает уведомления об изменениях.
  • Планировщик запускает скрипт по расписанию, логи пишутся.

Как протестировать

  1. Запустите скрипт вручную и убедитесь, что появились строки в таблице.
  2. Измените одно значение статуса в локальном журнале, затем снова запустите — должно прийти уведомление.
  3. Отключите интернет на минуту и снова включите — убедитесь, что повторные попытки работают, а система восстанавливается.

Показатели успешного выполнения

  • Доля успешных загрузок страниц более 95 процентов.
  • Уведомления приходят только при реальных изменениях.
  • Данные в Google Sheets чистые и консистентные, без дубликатов.

✅ Проверка: Снимите сводную таблицу в Google Sheets по столбцам site и status. Вы должны увидеть понятное распределение и временную динамику без пустых значений.

Типичные ошибки и решения

  • Проблема: пустые статусы в результатах. Причина: не найдены ключевые слова на странице. Решение: расширьте словарь ключевых слов, уточните selector_hint или исключите источник.
  • Проблема: слишком много уведомлений. Причина: статусы быстро меняются или шум. Решение: добавьте троттлинг и правило подтверждения изменения двумя подряд запусками.
  • Проблема: ошибки доступа к Google Sheets. Причина: сервисный аккаунт без прав. Решение: добавьте адрес сервисного аккаунта в доступы таблицы с правом Редактор.
  • Проблема: бот молчит. Причина: вы не начали диалог с ботом. Решение: напишите боту любое сообщение и повторите отправку.
  • Проблема: блокировки запросов. Причина: частые запросы или запрещенные действия. Решение: снизьте частоту, соблюдайте robots.txt и условия; источники с запретом исключите.
  • Проблема: планировщик не запускает скрипт. Причина: неверный путь к Python или скрипту. Решение: укажите абсолютные пути и проверьте права.
  • Проблема: лог-файлы растут. Причина: отсутствует ротация. Решение: включите ротацию и хранение ограниченного числа архивов.

Дополнительные возможности

Продвинутые настройки

  • Разделение очередей по доменам, чтобы управлять частотой отдельно для каждого сайта.
  • Кэширование страниц на диске с коротким TTL, чтобы повторные проверки в пределах нескольких минут не делали лишних запросов.
  • Гибкие правила уведомлений: отправлять лишь при переходе из out_of_stock в in_stock или при low_stock ниже порога.

Оптимизация

  • Пакетная запись в Google Sheets раз в N минут вместо записи на каждом товаре.
  • Сводная статистика по доменам в конце каждого запуска и короткое служебное сообщение в Telegram один раз в сутки.
  • Выделение уровней логирования: INFO для нормальной работы, WARNING для пропусков, ERROR для исключений.

Что еще можно сделать

  • Docker-контейнер для переносимости запуска на сервере.
  • Визуальные панели в Google Data Studio или аналогах на базе вашей Google-таблицы.
  • Снятие метрик и алертирование по времени выполнения, доле ошибок, числу источников.

Совет: Если вам важно работать строго в рамках бизнес-правил, согласуйте частоту и формат с владельцами сайтов. Иногда предоставляют партнерские решения.

⚠️ Внимание: Не используйте инструменты автоматизации для обхода технических ограничений, не задействуйте сервисы распознавания капчи и не пытайтесь маскироваться под реального пользователя. Это нарушает правила и может иметь юридические последствия.

Совет: Храните все конфиги в отдельной папке configs и ведите их версионирование, чтобы знать, когда и почему менялись правила парсинга.

FAQ

  • Как часто запускать мониторинг? Ответ: начните с одного запуска в час, затем подстройте под ваши потребности, не перегружая сайты.
  • Что делать, если статус берется только из динамического блока? Ответ: если нет публичного разрешенного способа получить эти данные, исключите источник.
  • Можно ли собирать цены вместе со статусом? Ответ: да, если это не противоречит правилам сайта. Добавьте поиск ценовых блоков и дополнительные столбцы в таблицу.
  • Нужен ли выделенный сервер? Ответ: нет, можно запускать на вашем компьютере. Для стабильности и доступности лучше сервер или облако.
  • Как понять, что я не нарушаю правила? Ответ: проверьте robots.txt, условия использования и избегайте обхода защитных механизмов. Действуйте прозрачно.
  • Что делать, если таблица достигает лимитов? Ответ: архивируйте старые строки в отдельный лист или CSV и оставляйте в основном только последние недели.
  • Как добавить новый сайт? Ответ: добавьте строку в sources.csv, при необходимости расширьте словарь ключевых слов и проверьте, что статус доступен без авторизации.
  • Можно ли использовать прокси? Ответ: можно, если это не для обхода ограничений, а для стабильности канала и соблюдения бизнес-требований. Укажите один согласованный прокси в .env.
  • Как отследить сбои ночью? Ответ: отправляйте раз в сутки служебное сообщение об итогах и включите предупреждение, если доля ошибок выше порога.
  • Какой формат столбца времени лучше? Ответ: храните время в UTC в ISO-формате, а в Google Sheets при необходимости конвертируйте в ваш часовой пояс.

Заключение

Вы создали понятную и устойчивую систему мониторинга наличия товаров у конкурентов: настроили безопасный парсер, свели данные к единому формату, внедрили Telegram-уведомления и интеграцию с Google Sheets, а также автоматизировали запуск. Вы научились проверять правомерность источников, соблюдать ограничения сайтов и поддерживать стабильность сети без спорных техник. Дальше вы можете расширять список товаров, добавлять аналитику по изменениям, настраивать панели для команды и улучшать надежность инфраструктуры. Действуйте этично и прозрачно — это залог долгосрочной устойчивости вашей системы и отношений с владельцами источников.

Совет: Раз в месяц пересматривайте список источников и качество распознавания статусов. Это небольшой рутинный шаг, который экономит много времени в будущем.

✅ Проверка: Убедитесь, что по итогам недели у вас есть регулярные записи в Google Sheets, редкие, но точные уведомления в Telegram и лог-файл без критичных ошибок.