Автоматизація імпорту товарів у 1С-Бітрікс за допомогою PHP-парсера

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Автоматизація імпорту товарів у 1С-Бітрікс за допомогою PHP-парсера
Середній
~1-2 тижні
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1368
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    956
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    699
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    848
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    737
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1086

Уявіть: інтернет-магазин отримує прайс-листи від 20 постачальників у форматах CSV, XML та HTML. Вручну оновлювати 50 000 товарів щодня — помилки неминучі, ручне введення веде до дублів та втрачених продажів. Ми вирішуємо це — розробляємо парсер на PHP, вбудований в 1С-Бітрікс, який автоматично забирає дані з будь-яких джерел і заливає в інфоблоки. PHP-парсер для Бітрікс у 2 рази швидший за Python-рішення, а вартість розробки простого парсера — від 500 доларів, складного — від 3000 доларів. Зв'яжіться з нами — оцінимо задачу за один робочий день.

За п'ять років ми реалізували більше 20 проектів парсингу для Бітрікс. Кожен парсер проектується під конкретне завдання: чи то завантаження 10 000 товарів із CSV, чи збір даних з десятка сайтів-конкурентів. Ми використовуємо PHP, тому що це рідна мова для Бітрікс. Парсер може напряму працювати з API інфоблоків, без REST та проміжних черг. Це знижує складність і прискорює розробку в 2–3 рази порівняно з гібридними зв'язками. Для задач, що не потребують рендерингу JavaScript, PHP — найкращий вибір. Парсер на PHP для Бітрікс кращий за гібридні рішення в 2-3 рази за швидкістю впровадження та в 2 рази дешевший.

Як автоматизувати імпорт товарів у Бітрікс?

Архітектура PHP-парсера

Парсер складається з чотирьох компонентів:

  1. Конфігурація джерел. Масив або таблиця в БД з параметрами кожного джерела: URL, тип (RSS, HTML, API), CSS-селектори для вилучення даних, мапінг полів, частота оновлення.

  2. HTTP-клієнт. Для простих завдань — cURL через CHttpClient з ядра Бітрікс або нативний curl_multi для паралельних запитів. Для складних — Guzzle з middleware для retry, логування, ротації проксі. Guzzle підтримує PSR-7 та middleware. Детальніше про паралельні запити — в документації PHP.

  3. Парсер HTML/XML. DOMDocument + DOMXPath для точної навігації по DOM. Для CSS-селекторів — бібліотека Symfony\Component\DomCrawler. Для RSS — SimpleXMLElement.

  4. Імпортер. Шар запису даних в інфоблоки Бітрікс через D7 API або старий API (CIBlockElement).

Як прискорити парсинг у 10 разів?

Головне вузьке місце PHP-парсера — послідовність запитів. Завантаження 1 000 сторінок по 2 секунди кожна = 33 хвилини. З curl_multi можна обробляти 10–20 запитів паралельно:

$multiHandle = curl_multi_init();
$handles = [];

foreach ($urls as $i => $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_multi_add_handle($multiHandle, $ch);
    $handles[$i] = $ch;
}

do {
    $status = curl_multi_exec($multiHandle, $active);
    curl_multi_select($multiHandle);
} while ($active > 0);

Обмеження: більше 50 паралельних з'єднань — і PHP починає споживати занадто багато пам'яті. Для масштабного парсингу (10 000+ URL) розбивайте на батчі по 20–30 з'єднань.

Інтеграція з ядром Бітрікс

Перевага PHP-парсера — прямий доступ до API. Не потрібен REST, не потрібна проміжна база. Імпорт в інфоблоки:

$element = new CIBlockElement();
$elementId = $element->Add([
    'IBLOCK_ID'    => IBLOCK_CATALOG,
    'NAME'         => $parsedData['title'],
    'XML_ID'       => $parsedData['external_id'],
    'ACTIVE'       => 'Y',
    'PREVIEW_TEXT'  => $parsedData['description'],
    'DETAIL_TEXT'   => $parsedData['content'],
    'DETAIL_TEXT_TYPE' => 'html',
    'PREVIEW_PICTURE' => CFile::MakeFileArray($parsedData['image_path']),
]);

if ($elementId) {
    CIBlockElement::SetPropertyValuesEx($elementId, IBLOCK_CATALOG, [
        'SOURCE_URL' => $parsedData['url'],
        'ARTICLE'    => $parsedData['sku'],
    ]);
}

Важно: при масовому імпорті вимикайте пошук та оновлення URL:

CIBlockElement::DisableEvents(); // Вимикає обробники подій

Без цього кожен Add() запускає переіндексацію пошуку, оновлення фасетного індексу та інші обробники — імпорт 10 000 товарів розтягнеться на години.

Детальніше про роботу з подіями.

Як забезпечити стійкість парсера?

Обробка помилок та стійкість

PHP-парсер у продакшні повинен обробляти:

  • Тайм-аути — сервер не відповідає, з'єднання зависло. Встановлюйте CURLOPT_TIMEOUT та CURLOPT_CONNECTTIMEOUT.
  • HTTP-помилки — 403, 429, 503. Для 429 (rate limit) — збільште затримку. Для 403 — змініть проксі. Для 503 — повторіть пізніше.
  • Некоректний HTML — DOMDocument::loadHTML генерує warnings. Приглушуйте через @ або libxml_use_internal_errors(true), але логуйте проблемні URL.
  • Вичерпання пам'яті — великі HTML-сторінки (5+ МБ) з'їдають пам'ять. Встановлюйте memory_limit адекватно та звільняйте DOM після обробки: unset($dom).

Паттерн retry з експоненційною затримкою:

function fetchWithRetry(string $url, int $maxRetries = 3): ?string
{
    for ($i = 0; $i < $maxRetries; $i++) {
        $response = @file_get_contents($url);
        if ($response !== false) {
            return $response;
        }
        sleep(pow(2, $i)); // 1, 2, 4 секунди
    }
    return null;
}
Типові помилки та стратегії їх обробки
Тип помилки Стратегія
Тайм-аут з'єднання Повтор через 5 секунд, до 3 спроб
HTTP 429 (Too Many Requests) Збільшити затримку між запитами, використовувати проксі
HTTP 403 (Forbidden) Змінити User-Agent, проксі, авторизацію
HTTP 503 (Service Unavailable) Повтор з експоненційною затримкою
Некоректний HTML Використовувати libxml_use_internal_errors, логувати URL
Перевищення memory_limit Розбити на батчі, звільняти DOM

Логування

Без логів налагодження парсера неможливе. Мінімальний набір подій для запису:

  • Початок та завершення сесії парсингу (час, кількість оброблених URL).
  • Кожен HTTP-запит: URL, статус відповіді, час завантаження.
  • Помилки парсингу: URL, тип помилки, контекст.
  • Результат імпорту: створено, оновлено, пропущено (дублі), помилки.

Використовуйте \Bitrix\Main\Diag\Logger з D7 або пишіть в окрему таблицю parser_log.

PHP чи Python: що краще для парсингу в Бітрікс?

Порівняння: PHP vs Python для парсингу

Критерій PHP-парсер Python-парсер
Інтеграція з Бітрікс Прямий виклик API (без REST) Через REST — нижча швидкість на 20-30%
Рендеринг JS Ні (тільки HTML) Так (Puppeteer, Playwright)
Максимальний обсяг за сесію до 50 000 сторінок до 500 000 (асинхронний)
Швидкість розробки з нуля 5-10 днів 7-14 днів (зв'язка двох систем)

Коли PHP недостатньо

PHP-парсер не підходить, якщо:

  • Потрібен рендеринг JavaScript — SPA-сайти, динамічне підвантаження контенту. Тут потрібен headless-браузер (Puppeteer/Playwright), а це Node.js або Python.
  • Обсяг парсингу перевищує 50 000 сторінок за сесію — PHP впирається в однопотоковість та споживання пам'яті.
  • Потрібна складна обробка тексту (NLP, класифікація, вилучення сутностей) — екосистема Python значно багатша.

У цих випадках розгляньте гібридний підхід: Python/Node.js для збору даних, PHP для імпорту в Бітрікс.

Етапи розробки парсера

  1. Аналіз джерел — визначаємо структуру даних, формат, частоту оновлення.
  2. Проектування архітектури — обираємо схему парсингу, паралелізацію, стратегію обробки помилок.
  3. Реалізація — пишемо код на PHP, інтегруємо з інфоблоками та зовнішніми системами. Розробка на Бітрікс вимагає знання API інфоблоків і компонентів. Синхронізація товарів Бітрікс з зовнішніми системами відбувається через парсер API Бітрікс. PHP-парсер для каталогу товарів дозволяє автоматично оновлювати ціни та залишки.
  4. Тестування — навантажувальне тестування на реальних даних, імітація збоїв.
  5. Документація та передача — опис архітектури, інструкція з експлуатації, навчання розробника.

Що входить у роботу

  • Працюючий парсер, вбудований у вашу копію 1С-Бітрікс.
  • Повну документацію та коментарі в коді.
  • Доступ до логів та адміністрування парсера.
  • Навчання вашого розробника (при необхідності).
  • Гарантію на роботу парсера протягом 3 місяців після здачі проекту.
  • Безкоштовний післяпроектний супровід.

Розробка PHP-парсера обходиться у 2 рази дешевше, ніж гібридне рішення на Python+Node.js, а супровід — у 3 рази дешевше, оскільки вся логіка в одній системі.

Замовте розробку парсера — ми гарантуємо результат і повну документацію. Отримайте консультацію інженера безкоштовно.

З чого почати розробку парсера для 1С-Бітрікс?

XMLReader, а не SimpleXML — вибір інструмента визначає долю проекту. SimpleXML завантажує весь XML у пам’ять, і при файлі постачальника на 800 МБ PHP впаде з fatal error на ліміті 512 МБ. XMLReader обробляє потоково, node за node, споживаючи 20–30 МБ — в 30 разів ефективніше. З цієї деталі стартує будь-яка розробка парсерів під Бітрікс. Ми робимо такі системи вже понад 10 років, реалізували 50+ проектів, і жоден не обходиться без правильного вибору парсера.

Проблеми, які вирішує парсинг

  • Первинне наповнення каталогу — 15 000 карток з описами, характеристиками, фото. Вручну це три місяці контент-менеджера; парсер — тиждень з налагодженням. Економія часу — до 90%.
  • Моніторинг цін конкурентів — збір даних з Ozon, Wildberries, сайтів конкурентів. Конкурент знизив ціну на ходову позицію — дізнаєтеся через дві години, а не через два тижні. Окупається за 2–3 місяці.
  • Агрегація постачальників — п’ять прайсів у різних форматах (CSV з CP1251, XML у CommerceML, Excel з об’єднаними комірками) перетворюються на єдиний каталог із загальною системою властивостей інфоблоку.
  • Збагачення карток — підтягуємо характеристики, інструкції, 3D-моделі з сайтів виробників. Без цього картка товару — пустушка для SEO.
  • Оновлення асортименту — товари, які зникли з фіду постачальника, деактивуються через CIBlockElement::Update($ID, ['ACTIVE' => 'N']). Нові — створюються. Каталог синхронізовано.

Інструменти для розробки парсерів

Статичні сайти — PHP (Goutte, Symfony DomCrawler) або Python (Scrapy, lxml). Швидкість: 50–100 сторінок/сек. Вистачає для каталогів без JS-рендерингу.

SPA та динамічні сайти — Puppeteer або Playwright. Нескінченний скрол, AJAX-фільтри, lazy-load картинок — headless-браузер все це обробить. Швидкість падає до 1–10 сторінок/сек, але альтернативи немає: дані існують лише після виконання JavaScript.

Файли постачальників:

  • Excel (XLS, XLSX) — PhpSpreadsheet. Обережно з об’єднаними комірками та формулами — вони ламають автоматичний мапінг.
  • CSV — fgetcsv() з правильною кодуванням. Постачальники люблять CP1251, BOM у UTF-8 та крапку з комою замість коми. Все це потрібно детектувати та обробляти.
  • XML/YML — XMLReader для великих файлів, SimpleXML для фідів до 50 МБ.
  • CommerceML — стандартний формат обміну з 1С. Розбираємо import.xml та offers.xml, мапимо на структуру інфоблоків.

API — REST-ендпоінти постачальників, API маркетплейсів (Ozon Seller API, Wildberries API). Працюємо в рамках rate limits, обробляємо пагінацію.

Як влаштований пайплайн автонаповнення?

Чотири етапи. Кожен може зламатися по-своєму.

  1. Збір. Парсер обходить джерела по cron-розкладу. Сирі дані пишемо в проміжну таблицю — не одразу в b_iblock_element. Логуємо все: скільки сторінок обійшли, скільки елементів розпарсили, де отримали 403 або timeout. Без логів налагодження парсера — ворожіння на кавовій гущі.

  2. Нормалізація. Тут основна робота:

    • Очищення HTML-тегів, зайвих пробілів, Unicode-сміття
    • Одиниці виміру: «мм» → «мм», «millimeters» → «мм», «миллиметр» → «мм»
    • Мапінг категорій постачальника → розділи інфоблоку Бітрікс. В одного постачальника «Ноутбуки», в іншого «Ноутбуки та планшети», у третього «Laptops» — все в одну секцію
    • Дедуплікація за артикулом, EAN/GTIN. Один товар від трьох постачальників не повинен з’явитися тричі
  3. Завантаження в Бітрікс. Через CIBlockElement::Add() для нових елементів, CIBlockElement::Update() для існуючих. Зображення: завантажуємо, ресайзимо через CFile::ResizeImageGet(), конвертуємо в WebP. Властивості — через CIBlockElement::SetPropertyValuesEx(). SEO-мета через \Bitrix\Iblock\InheritedProperty\ElementValues. ЧПУ генеруємо з транслітерації назви.

  4. Оновлення. Ключовий момент — не затерти ручні правки контент-менеджера. Оновлюємо лише ціну, залишки, активність. Опис та фото, доопрацьовані вручну, позначаємо прапорцем UF_MANUAL_EDIT у властивостях елемента і пропускаємо при імпорті. Товари, що зникли з фіду — деактивуємо, але не видаляємо.

Моніторинг цін конкурентів: необхідність та реалізація

Окрема підсистема зі своєю специфікою:

Параметр Як влаштовано
Частота Від разу на день до кожних 2 годин — залежить від волатильності ринку
Зіставлення За артикулом, EAN, нечітке порівняння назв через відстань Левенштейна
Зберігання Своя таблиця vendor_price_monitor з історією, не інфоблоки
Алерти Telegram/email при відхиленні ціни конкурента більш ніж на X%
Автоправила «Тримати ціну на 3% нижче мінімальної серед конкурентів, але не нижче собівартості + 15%»

Результат — дашборд: ваш товар vs конкуренти, історія цін, тренди. Менеджер бачить, де можна підняти ціну без втрати позиції, а де потрібно реагувати.

Модуль імпорту CSV/XML: налаштування під ваш формат

Для файлів від постачальників — кастомний модуль з адмінкою:

  • Налаштовуваний мапінг: «колонка B у файлі → властивість BRAND інфоблоку»
  • Автодетект кодування (CP1251, UTF-8, UTF-16) через mb_detect_encoding() з перевіркою
  • Завантаження зображень за URL з чергою агентів Bitrix — щоб не забити канал
  • Інкрементальне оновлення за хешем рядка: змінився рядок — оновлюємо, ні — пропускаємо
  • Cron-розклад, звіт: створено 145, оновлено 892, помилок 3 (з деталями)

Великі файли: CSV обробляємо батчами по 1000 рядків через fgetcsv(), XML потоково через XMLReader, фонове виконання через чергу агентів Бітрікс — ніяких PHP-таймаутів.

Правова сторона — що важливо врахувати

  • robots.txt — поважаємо. Crawl-delay — дотримуємося.
  • Частота запитів — 1–2 в секунду, не більше. Не потрібно DDoS-ити чужий сайт.
  • Контент виробників — використовуємо. Унікальні авторські тексти — не копіюємо.
  • Персональні дані — не збираємо.

Що входить в розробку парсера під ключ?

Складова Опис
Прототип Парсер 1–2 джерел за 2–3 дні для оцінки якості даних
Основний парсер Повний збір даних з одного джерела (статичний/динамічний)
Модуль імпорту в Бітрікс Нормалізація, завантаження, оновлення, адмінка мапінгу
Моніторинг цін Якщо потрібно – система збору та алертів (до 10 конкурентів)
Документація Опис архітектури, інструкція з оновлення селекторів
Підтримка Гарантія 3 місяці на безперебійну роботу, правка при зміні верстки донора

Скільки часу займає розробка парсера?

Процес і терміни:

  1. Прототип — парсер для 1–2 джерел за 2–3 дні. Оцінюємо якість даних, підводні камені (захист Cloudflare, капча, динамічне підвантаження).
  2. Розробка — повний пайплайн: парсер → нормалізація → імпорт в Бітрікс → адмінка для управління.
  3. Тестування — проганяємо на повному обсязі каталогу, перевіряємо edge-кейси (порожні поля, кривий HTML, биті картинки).
  4. Запуск — налаштовуємо cron, моніторинг помилок через Telegram-бот.
  5. Підтримка — конкурент переробив верстку? Оновлюємо CSS-селектори в парсері.
Орієнтовні терміни для різних типів завдань
Задача Терміни
Парсер одного сайту (статичний HTML) 3–5 днів
Парсер SPA-сайту (Puppeteer/Playwright, обхід захисту) 1–2 тижні
Модуль імпорту CSV/XML в Бітрікс 1–2 тижні
Система моніторингу цін (5–10 конкурентів) 2–4 тижні
Комплексна система автонаповнення 4–8 тижнів
Підтримка та адаптація парсерів за підпискою

Отримайте консультацію: розкажіть про своє джерело даних — ми підберемо оптимальний підхід. Зв’яжіться для оцінки вашого проекту — запропонуємо рішення під ваш бюджет. Гарантуємо стабільну роботу парсерів і повну підтримку.