• Парсер каталога запчастей с антибот-защитой и нормализацией данных в PostgreSQL + дифф-обновления

    18 часов назад
    • Желаемый бюджет до 650.01 USD
    • Ожидает исполнителя...
  • Исходная ситуация: в отделе снабжения ведём собственный каталог автозапчастей и заменителей. Поставщик публикует актуальные цены, остатки и применимость в закрытом B2B-каталоге, где страницы рендерятся через JS, часть запросов уходит в XHR, есть антибот (проверки заголовков, rate-limit, периодические CAPTCHA), а карточки товара меняют структуру. Нужен устойчивый парсер, который регулярно обновляет данные и фиксирует изменения, чтобы мы не сравнивали всё вручную.

    Техническая среда и вводные: Linux (Ubuntu 22.04), Python 3.11, PostgreSQL 15. Развёртывание в Docker Compose. Доступ к B2B через логин-пароль и 2FA по одноразовому коду из email (IMAP доступ дадим). Прокси предоставим, но их качество разное. Храним 2 языка описаний (RU/EN), валюты могут быть разные.

    Что должно получиться: сервис, который по расписанию собирает из B2B-каталога категории и товары, тянет по каждому товару артикул, бренд, название, цены по складам, остатки, сроки поставки, применимость/аналоги, ссылки на изображения, характеристики (ключ-значение), а также помечает снятые с продажи позиции. Данные должны сохраняться в PostgreSQL в нормализованной схеме с историей изменений (цен/остатков) и возможностью выгрузки в CSV.

    Этапы выполнения:
    1) Анализ источника и протокола: определить точки входа, XHR-эндпоинты, параметры фильтров/пагинации, лимиты, сигнатуры запросов, поведение антибота, стратегии ретраев.
    2) Реализация логина и сессий: авторизация, обработка 2FA через IMAP, хранение сессии, автоматическое продление, безопасное хранение секретов через env.
    3) Сбор данных: обход категорий, пагинация, сбор карточек, загрузка изображений только по необходимости (флаг), извлечение характеристик и аналогов, нормализация валют/единиц измерения.
    4) Хранилище: PostgreSQL схема (минимум товары, предложения/склады, остатки, цены-история, аналоги, характеристики, медиа), миграции, индексы, upsert-логика и дифф-обновления.
    5) Устойчивость: прокси-rotation, ограничение скорости, backoff, детект блокировок, переключение на альтернативный маршрут (XHR vs HTML), подробные логи и метрики выполнения.
    6) Экспорт и отчёты: CLI команды для выгрузки CSV по фильтрам (бренд, категория, дата), отчёт об изменениях за период (сколько товаров изменилось по цене/остаткам).

    Ограничения:
    - CAPTCHA решать через внешние платные сервисы нельзя. Если появляется CAPTCHA, задача парсера - корректно зафиксировать событие, переключить прокси/пауза и продолжить без ручного ввода, насколько это возможно.
    - Нагрузка на сайт: не более 1 запроса в секунду на один прокси, максимум 3 параллельных воркера.
    - Код без привязки к GUI, управление через CLI и конфиг.

    Измеримые критерии приёмки:
    - Повторяемый прогон на тестовом наборе из 5 категорий должен собрать не менее 95% товаров, найденных через встроенный поиск на сайте (погрешность допускается из-за временных блокировок, но должна быть в отчёте).
    - Для 100 случайно выбранных товаров данные в БД совпадают с сайтом по артикулу, бренду, цене и остатку (проверим вручную по списку).
    - При втором прогоне без изменений в источнике не создаются лишние дубликаты и история цен/остатков не пополняется.
    - Логи содержат: количество обработанных страниц, товаров, ошибок по типам, среднее время ответа, количество блокировок/ретраев.
    - Docker Compose поднимает всё одной командой, есть README с инструкциями запуска, переменными окружения и примерами CLI.

    Предпочтительные инструменты: Playwright (Python) для JS/антибот-обхода + requests/httpx там, где возможно; Alembic для миграций; структурированные логи (json).
Ваше предложение

Вы ещё не оставили предложение к этому заказу.
Нажмите «Предложить услугу», чтобы отправить своё предложение.

Нужно похожее задание?

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

Задание «Парсер каталога запчастей с антибот-защитой и нормализацией данных в PostgreSQL + дифф-обновления» можно использовать как ориентир для своего брифа: что нужно сделать, какой результат нужен и какой бюджет указать.