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

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

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

Часті запитання

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1013
  • 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
    751
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    873
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    791
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1153

Уявіть: інтернет-магазин отримує прайс-листи від 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 рази дешевше, оскільки вся логіка в одній системі.

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