Парсинг данных из Яндекс.Маркет для 1С-Битрикс
Яндекс.Маркет не предоставляет публичного API для массовой выгрузки карточек товаров. Партнёрское API (Content API) даёт доступ только продавцам к собственным данным. Значит, для наполнения каталога 1С-Битрикс данными из Маркета остаётся парсинг — с его техническими ограничениями, правовыми рисками и инженерными задачами.
Что именно парсится
Карточка товара на Яндекс.Маркете содержит:
- Название и описание — текст, часто сгенерированный из характеристик.
- Характеристики — структурированные пары «ключ-значение» (вес, размеры, материал).
- Цены и предложения продавцов — динамические данные, обновляемые в реальном времени.
- Изображения — от 1 до 15 фото разного разрешения.
- Отзывы и рейтинг — пользовательский контент.
- Категория — дерево рубрик Маркета, не совпадающее со структурой вашего каталога.
Для наполнения каталога 1С-Битрикс обычно нужны название, описание, характеристики и изображения. Цены парсить смысла мало — они меняются несколько раз в день.
Техническая реализация
Яндекс.Маркет — одностраничное приложение. HTML-страница содержит минимум разметки, основные данные подгружаются через внутренние API-вызовы и рендерятся на клиенте. Это означает, что обычный HTTP-запрос через cURL вернёт пустую оболочку.
Два подхода к парсингу:
1. Headless-браузер (Puppeteer, Playwright). Рендерит JavaScript, дожидается загрузки данных, извлекает DOM. Надёжно, но медленно — 3–5 секунд на страницу. Для каталога в 10 000 товаров это 8–14 часов непрерывного парсинга.
2. Перехват внутренних API. Маркет подгружает данные через XHR-запросы к внутренним эндпоинтам. Если воспроизвести эти запросы с нужными заголовками и cookies — получаете JSON без рендеринга страницы. Быстрее в 10–20 раз, но формат ответа меняется без предупреждения.
На практике используется комбинация: headless-браузер для первичного анализа и получения сессионных токенов, прямые запросы к API — для массовой выгрузки.
Обход защиты
Яндекс активно блокирует автоматические запросы:
- SmartCaptcha — появляется после 50–200 запросов с одного IP.
- Fingerprinting — анализ TLS-отпечатка, заголовков, поведенческих паттернов.
- Rate limiting — жёсткие лимиты на частоту запросов.
Для стабильного парсинга необходимы:
- Ротация прокси-серверов (резидентные прокси, не датацентровые).
- Рандомизация задержек между запросами (2–10 секунд).
- Ротация User-Agent и других заголовков.
- Обработка капчи — через сервисы распознавания или ручную очередь.
Без ротации прокси парсинг Маркета не работает. Один IP блокируется в течение часа.
Маппинг данных в инфоблок Битрикс
Структура данных Маркета не совпадает со структурой вашего каталога. Нужен слой трансформации:
| Яндекс.Маркет | Инфоблок Битрикс | Примечание |
|---|---|---|
title |
NAME |
Обрезка до 255 символов |
description |
DETAIL_TEXT |
HTML → очистка тегов или сохранение |
specs[] |
PROPERTY_* |
Маппинг по названию характеристики |
images[] |
DETAIL_PICTURE + MORE_PHOTO |
Скачивание и сохранение локально |
categoryPath |
IBLOCK_SECTION_ID |
Маппинг через таблицу соответствий |
modelId |
XML_ID |
Уникальный идентификатор для дедупликации |
Характеристики Маркета — плоский список. Свойства инфоблока — типизированные поля. Нужна таблица маппинга: «Вес, г» → PROPERTY_WEIGHT (тип: число), «Цвет» → PROPERTY_COLOR (тип: список, поиск по значению).
Загрузка в Битрикс
Рекомендуемый путь — промежуточное хранилище. Парсер складывает данные в отдельную таблицу или JSON-файлы. Отдельный скрипт читает промежуточные данные и импортирует через API инфоблоков:
CIBlockElement::Add($arFields);
CIBlockElement::SetPropertyValuesEx($elementId, $iblockId, $propertyValues);
Прямой импорт из парсера опасен: если парсер сломался на середине — в каталоге останутся частично заполненные карточки.
Для каталогов свыше 5 000 товаров используйте \Bitrix\Iblock\ElementTable::add() — D7 API работает быстрее старого API и поддерживает батчевые операции.
Поддержание актуальности
Первичный импорт — половина задачи. Данные на Маркете обновляются: меняются характеристики, добавляются фото, товары снимаются с продажи.
Стратегии обновления:
- Полный реимпорт — пропарсить весь каталог заново, сравнить с текущими данными, обновить изменения. Подходит для каталогов до 5 000 позиций.
- Инкрементальный — парсить только категории, где замечены изменения (по RSS-фиду или дате обновления). Сложнее в реализации, но экономит ресурсы.
- По триггеру — обновлять конкретный товар по запросу менеджера через интерфейс админки.
| Размер каталога | Стратегия обновления | Частота | Ориентировочное время |
|---|---|---|---|
| До 1 000 товаров | Полный реимпорт | Еженедельно | 2–4 часа |
| 1 000–10 000 | Инкрементальный | Ежедневно | 4–8 часов |
| Свыше 10 000 | Инкрементальный + триггерный | По расписанию | 8–24 часа |
Правовой аспект
Парсинг Яндекс.Маркет нарушает пользовательское соглашение сервиса. Яндекс может заблокировать IP, аккаунт и теоретически предъявить претензии. На практике претензии к парсерам предъявляются редко, но использовать спарсенные описания и фото «как есть» — риск. Рекомендуется рерайт описаний и проверка лицензий на изображения.







