84 звёзд на GitHub и продолжает расти. Yozh Crawler + Scraper — бесплатный, опенсорсный и создаётся публично — поставьте нам звезду, если он заслужил место в вашем стеке.
CyberYozh Data / Сценарии / Электронная коммерция и торговые площадки
Сценарий · E-commerce

Одна схема. Каждый маркетплейс

Отправьте любой URL товара — Amazon, eBay, Walmart, AliExpress или 20+ других — и получите обратно одинаковый чистый структурированный JSON. Никаких селекторов для поддержки, никакой борьбы с анти-ботами, никаких хрупких пайплайнов.

$curl -X POST localhost:8000/api/v1/scrape/page \ -d '{"url":"amazon.com/dp/B0CFFXRFTH"}'
amazon.com/dp/B0CFFXRFTH
scrape_page amazon.com
Fetching product page
Bypassing anti-bot
Extracting JSON-LD + DOM
Normalizing variants
Resolving images
Работает на этих маркетплейсах
Почему обычные скрейперы не справляются

Маркетплейсы ломают универсальные скрейперы в течение квартала

E-commerce-платформы выпускают обновления вёрстки каждые несколько недель, разворачивают многослойную защиту от ботов, прячут Buy Box и данные продавцов за сессиями и возвращают разную структуру полей в каждой локали. Большинство команд тратят 80% времени на поддержание работоспособности скрейпера и 20% — на сами данные. Мы даём четыре вещи, которые им приходится каждый раз переписывать с нуля.

Если вы когда-нибудь просыпались и видели дашборд, полный null, после редизайна маркетплейса — это для вас.

Селекторы ломаются при каждой смене вёрстки

Проблема. Обычные скрейперы задают путь CSS или XPath и надеются на лучшее. Когда маркетплейс переделывает карточку товара (PDP) — Amazon делает это каждые несколько недель — ваш пайплайн возвращает тихие null в проде. Вы узнаёте об этом из BI-дашборда лишь через несколько часов.

Как это решает Yozh Scraper. Передайте llm: {model: "..."} в запросе, и парсер попросит Anthropic / OpenAI / Gemini / OpenRouter регенерировать селектор из живого DOM. Пайплайн продолжает работать с флагом self_heal: true в ответе — без ночных подъёмов по тревоге.

  • LLM-самовосстановление
  • Много провайдеров
  • Ноль простоя

Один IP, пять запросов, бан

Проблема. Датацентровые прокси выгорают за одну сессию. Стены CAPTCHA, отпечатки TLS и JavaScript-проверки вычисляют headless-браузеры за секунды. Большинство команд строят слой ротации прокси с нуля и всё равно получают баны.

Как это решает Yozh Scraper. Нативная интеграция с CyberYozh App Proxy через CYBERYOZH_API_KEY — 5 типов прокси (резидентные ротируемые / статичные, мобильные 4G/5G, датацентровые, ISP) в 250 странах. Стелс-сборка Chromium с «прогретым» отпечатком автоматически совпадает с происхождением прокси.

  • 5 типов прокси
  • 250 стран
  • «Прогретый» отпечаток

Разная структура полей на каждом маркетплейсе

Проблема. Цена Amazon лежит в одном блоке, eBay — в другом, Walmart — в третьем. Кросс-маркетплейсным дашбордам нужен слой нормализации ещё до первой метрики. Команды тратят недели на сведение структур полей.

Как это решает Yozh Scraper. 10 встроенных пресетов в src/presets/builtin/ возвращают идентичный JSON для Amazon, eBay, Walmart, Google Shopping. Одинаковые ключи: title, price, currency, in_stock, rating. Разбор валюты с учётом локали — структура остаётся прежней.

  • 10 пресетов
  • Одинаковая структура JSON
  • Разбор валюты по локали

Стены логина и умирающие сессии

Проблема. Данные, привязанные к аккаунту — победитель Buy Box, партнёрские порталы, внутренние админки, источники профилей вроде LinkedIn — требуют входа. Самописное хранение куки ломается при повторной авторизации. Большинство скрейперов вообще не имеют управления сессиями.

Как это решает Yozh Scraper. Sessions API с декларативным DSL для входа (goto / fill / click / wait) или вставкой экспортированных куки. Переиспользуйте session_id в каждом скрейпе — куки + storageState хранятся 24 часа и обновляются на лету. Обязательно для пресета LinkedIn, поддерживается всеми остальными.

  • Декларативный вход
  • Куки + storageState
  • TTL 24 часа
Как это работает

От URL до структурированного JSON за 3 вызова

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

1 Запуск

Клонируйте репозиторий и docker compose up. Запускаются два сервиса: скрейпер на :8000, краулер на :8001.

# one-time setup
git clone \
  github.com/CyberYozh-data/yozh-scraper
cd yozh-scraper
docker compose up -d
2 Вызов пресета

Отправьте POST с именем пресета и параметрами. Никаких селекторов, никакой настройки анти-бота — пакет пресета берёт на себя селекторы, локаль и разбор валюты.

curl \
  localhost:8000/api/v1/scrape/preset/page \
  -X POST \
  -d '{"source": "amazon_product",
       "preset_params": {"asin": "B0CFFXRFTH"},
       "locale": "us"}'
3 Получение структурированного JSON

Одинаковая структура во всех регионах. Если селектор ломается после смены вёрстки, LLM-самовосстановление регенерирует его на лету — пайплайн продолжает работать.

{
  "asin":       "B0CFFXRFTH",
  "price":      189.99,
  "currency":   "USD",
  "in_stock":   true,
  "rating":     4.7
}
Живой пример

Что вы получаете на выходе — одна структура для каждого маркетплейса

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


            
Рецепты

Как команды собирают это — по 10 строк на каждый

Три конкретных e-commerce-сценария, готовых вставить. Планировщик не входит в комплект — используйте свой cron / Airflow / Temporal.

1 Ежедневный снимок цен

Пакетно обрабатывайте список ASIN конкурентов раз в день, сравнивайте со вчерашним, отправляйте изменения в Slack. Остальное делает cron.

# crontab: every day at 06:00
0 6 * * * /usr/local/bin/price-watch.sh

# price-watch.sh
curl -X POST localhost:8000/api/v1/scrape/preset/pages \
  -d "@asins.json" \
| jq '.results[] | {asin, price, in_stock}' \
> today.json

diff yesterday.json today.json | slack-cli post #pricing
mv today.json yesterday.json
200 URL/пакет ~30 с на 1 воркере ваш cron
2 Обнаружение новых товаров

Ежедневно краульте страницу категории, дедуплицируйте URL товаров относительно вчерашних. Webhook на новинки раньше, чем их проиндексируют конкуренты.

# start a crawl of the category
curl -X POST localhost:8001/api/v1/crawl/start \
  -d '{"seed_url":"amazon.com/s?k=ssd",
       "max_pages":300,
       "scope":"same-domain"}' \
| jq -r '.urls[]' > today_urls.txt

# urls that appeared today
comm -13 yesterday_urls.txt today_urls.txt \
| curl -X POST $WEBHOOK_URL -d @-
SSE-поток дедуп по задаче (SHA1) scope + rate-limit
3 Источник за логином · сессии

Скрейпите страницы за логином (LinkedIn, партнёрские порталы, внутренние админки). Войдите один раз через Sessions API, затем переиспользуйте session_id в каждом скрейпе.

# 1. log in once via declarative script
SID=$(curl -X POST \
  localhost:8000/api/v1/sessions/$ID/login \
  -d "@login_script.json" \
  | jq -r .session_id)

# 2. reuse for every scrape · cookies persist 24h
curl -X POST localhost:8000/api/v1/scrape/preset/page \
  -d "{\"source\":\"linkedin_profile\",
       \"preset_params\":{\"slug\":\"satyanadella\"},
       \"session_id\":\"$SID\"}"
TTL 24 часа куки + storageState CAPTCHA: вставьте куки
FAQ

Частые вопросы о данных маркетплейсов

Какие маркетплейсы поддерживаются?
10 встроенных пресетов в src/presets/builtin/, охватывающих крупнейшие источники данных: amazon_product (us, uk, de, fr, jp), amazon_search (us, uk, de), ebay_search (us, uk, de), walmart_product (us), google_search (us, uk, de, fr, ru, jp), google_shopping (us, uk, de), bing_search (us, uk, de, fr, ru, jp), yandex_search (us, uk, de, fr, ru, jp), youtube_video (глобально), linkedin_profile (глобально, требует session_id). Нужно что-то ещё? Используйте POST /api/v1/presets/generate с примером URL — LLM определит схему и сгенерирует селекторы за вас.
Насколько стабильна схема?
Одинаковая структура полей во всех регионах и пресетах — amazon_product в .us, .uk, .de, .fr, .jp возвращает идентичные ключи (валюта локализована, структура неизменна). Опциональные поля явно допускают null, поэтому отсутствующие значения никогда не ломают ваш парсер. Когда маркетплейс меняет вёрстку, LLM-самовосстановление регенерирует селектор на лету (передайте llm: {model: "..."} в запросе) — пайплайн продолжает работать с флагом self_heal: true в ответе. Ломающие изменения выходят только в минорных версиях с примечаниями по миграции в CHANGELOG.md.
Можно ли скрейпить Amazon / eBay / Walmart?
Да — все три являются первоклассными пресетами, без дополнительной настройки. Amazon доступен в 5 региональных локалях (us, uk, de, fr, jp) для карточек товаров (PDP) и поиска; eBay покрывает поиск us/uk/de; Walmart .us для страниц товаров. Каждый возвращает одинаковую структуру JSON: title, price, currency, in_stock, rating, seller, плюс специфичные для маркетплейса поля там, где они есть (ASIN, победитель Buy Box, флаг спонсирования). Для данных за логином (цены Prime, партнёрские порталы) используйте Sessions API и передавайте session_id с запросом.
Как быстро можно получить первые данные?
Примерно 5 минут от начала до конца. git clone + docker compose up -d поднимает скрейпер за ~30 секунд (Docker один раз скачивает образ). Первый curl POST /api/v1/scrape/preset/page возвращает структурированный JSON за 1–3 секунды для кешированных локалей и до 5–8 секунд «на холодную». Без регистрации, без создания API-ключа, без SaaS-тарификации — вы обращаетесь к эндпоинту на localhost:8000, как только контейнер готов.
Обрабатываете ли вы прокси и защиту от ботов?
Да. Скрейпер интегрируется с CyberYozh App Proxy через CYBERYOZH_API_KEY — 5 типов прокси в 250 странах (резидентные ротируемые / статичные, мобильные 4G/5G, датацентровые, ISP). Защита от ботов обеспечивается стелс-сборкой Chromium с «прогретым» отпечатком, подходящим резидентным прокси и человекоподобным таймингом — большинство сценариев полностью избегают CAPTCHA. Когда CAPTCHA всё же появляется, скрейпер возвращает её как структурированную ошибку, а не решает молча. Правило: резидентные ротируемые для скрейпинга масштаба каталога, мобильные для зон агрессивной защиты от ботов или задач за логином.
Открытый код · Лицензия MIT · 84 ★

Готовы скрейпить маркетплейсы?

Yozh Scraper работает с Amazon, eBay, Walmart и Google Shopping из коробки. Бесплатно. Навсегда. Поставьте звезду, если он вам помог — каждая звезда на счету.

Yozh Crawler + Scraper распространяется под лицензией MIT. Используйте. Форкайте. Создавайте.

Нас любят data-команды и AI-разработчики

Что говорят те, кто строит на Yozh

5,0 / 5 · Отзывов: 5
GitHub
Заменили наш собственный кластер Playwright на Yozh за полдня. MCP-эндпоинт встал прямо в нашего Claude-агента — ноль связующего кода, краулер и скрейпер просто заработали.
Marcus Reinhardt Ведущий дата-инженер Northwind Analytics
X
Система пресетов — киллер-фича. Передаём имя источника и получаем чистый JSON; самовосстановление даже поймало два изменения вёрстки Amazon раньше нас.
Priya Nair Основатель ScrapeStack
Reddit
Наконец-то опенсорсный скрейпер, для которого прокси и сессии — первоклассные сущности. Гоняем его за логин-стенами партнёрских порталов — сессии живут, результаты стабильны в разных регионах.
Daniel Osei Backend-инженер Loopfeed
X
Подключил к Cursor через MCP, и теперь мой агент тянет живые веб-данные прямо посреди задачи. Стриминговый обход по SSE — именно то, чего не хватало агентным сценариям.
Elena Kovac ИИ-инженер Vektor Labs
GitHub
Ушли с платного API скрейпинга ради экономии и готовились к откату по качеству — получили обратное. Self-hosted, без оплаты за запрос, а схема вывода чище, чем та, за которую мы платили.
Sofia Almeida Инженерный менеджер Tabbly