Парсинг даних з Яндекс.Маркета для 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, аккаунт та теоретично висунути претензії. На практиці претензії до парсерів висуваються рідко, але використовувати спарсені описи та фото «як є» — ризик. Рекомендується рерайт описів та перевірка ліцензій на зображення.







