Кейс · Данные

Парсер маркетплейса — 2,8 млн товаров/день

Распределённый скрапинг с обходом антибота и ротацией прокси: следит за ценами и остатками по миллионам SKU и отдаёт чистые данные через API и в PostgreSQL по расписанию.

  • Роль Solo build
  • Срок 2 недели
  • Год 2025
  • Стек Scrapy · Playwright · PostgreSQL
  • 2,8 млн товаров в день
  • 99,5% uptime пайплайна
  • <0,3% ошибок парсинга
  • 5 мин свежесть данных
01 · Задача

Задача

Нужно было видеть цены и остатки конкурентов по всему ассортименту — в реальном времени, а не раз в неделю руками.

Каталог маркетплейса — это миллионы SKU, которые меняются ежеминутно: цена, скидка, наличие, рейтинг. Готовые сервисы отдавали данные с задержкой в сутки и по верхушке категорий, а наивный скрапер упирался в антибот, капчу и блокировки по IP уже на первых тысячах запросов.

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

02 · Архитектура

Архитектура: конвейер данных

Планировщик ставит задачи, пул воркеров параллельно собирает страницы через ротацию прокси, парсер-валидатор приводит всё к единой схеме, чистые данные ложатся в PostgreSQL и S3 и отдаются через API.

Marketplace parser — data pipeline A scheduler feeds a parallel worker pool through proxy rotation; a parser/validator normalises data into PostgreSQL and S3, served via an API. 01 · SCHEDULE 02 · WORKER POOL 03 · PARSE · VALIDATE 04 · STORE · SERVE enqueue raw html clean rows serve retry · re-queue failed Scheduler Airflow · queue — PARALLEL · AUTOSCALE — Worker · Scrapy fetch · paginate Worker · Playwright render JS · anti-bot Worker · Scrapy fetch · paginate proxy rotation Parser / Validator extract · normalize schema · dedupe price · stock deltas PostgreSQL live state S3 raw · snapshots API REST · feed · webhook
Поток: планировщик → пул параллельных воркеров (скраперы + ротация прокси) → парсер/валидатор → PostgreSQL + S3 → API.

Планировщик на Airflow раскладывает каталог на пачки задач и кладёт их в очередь Redis. Пул воркеров разбирает очередь параллельно: лёгкие страницы тянет Scrapy, JS-тяжёлые — Playwright с обходом антибота, и каждый запрос уходит через ротацию прокси, чтобы не упереться в блокировки. Пул автоматически масштабируется под объём очереди.

Сырой HTML проходит парсер-валидатор: данные извлекаются, приводятся к единой схеме, дедуплицируются и проверяются — мусор и аномалии цены/остатка отсекаются (отсюда <0,3% ошибок). Битые задачи возвращаются в очередь на повтор. Чистые строки ложатся в PostgreSQL как актуальное состояние, сырьё и снапшоты — в S3, а наружу всё отдаётся через API. Весь конвейер упакован в Docker.

03 · Результаты

Результаты

Что показывает пайплайн в продакшене.

2,8 млн

товаров / день

Устойчивая пропускная способность пула воркеров на пике.

99,5%

uptime

Блокировки и сбои гасятся ретраями и ротацией прокси — пайплайн не падает.

<0,3%

ошибок парсинга

Валидация по схеме отсекает мусор и аномалии цены и остатка.

5 мин

свежесть данных

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

04 · Стек

Стек

Сбор / скрапинг

  • Python
  • Scrapy
  • Playwright
  • прокси-ротация

Данные / хранение

  • PostgreSQL
  • Redis
  • S3

Оркестрация / инфра

  • Airflow
  • Docker
05 · Как это работает

Как это работает

  1. Планировщик ставит задачи

    Airflow по расписанию раскладывает каталог на пачки задач — категории и списки SKU — и кладёт их в очередь Redis.

  2. Воркеры собирают параллельно

    Пул воркеров разбирает очередь одновременно: Scrapy — лёгкие страницы, Playwright — JS-тяжёлые с обходом антибота. Каждый запрос идёт через ротацию прокси.

  3. Парсер чистит и валидирует

    Сырой HTML превращается в структурированные строки: единая схема, дедупликация, проверка цены и остатка. Аномалии и мусор отсекаются, битые задачи уходят на повтор.

  4. Данные ложатся в хранилище

    Чистые строки пишутся в PostgreSQL как актуальное состояние цен и остатков, а сырьё и снапшоты складываются в S3 для истории и переразбора.

  5. API отдаёт свежие данные

    Наружу данные уходят через REST-API, выгрузки-фиды и вебхуки на изменение цены или наличия — горячие категории обновляются примерно раз в 5 минут.

Нужен похожий проект?

Соберу парсер или пайплайн данных под вашу задачу — от обхода антибота до чистого API в проде.