Разработка парсера на PHP для 1С-Битрикс — автоматический импорт товаров

Представьте: интернет-магазин получает прайс-листы от 20 поставщиков в форматах CSV, XML и HTML. Вручную обновлять 50 000 товаров каждый день — ошибки неизбежны, ручной ввод ведёт к дублям и потерянным продажам. Мы решаем это — разрабатываем **парсер** на PHP, встроенный в 1С-Битрикс, который автома
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка парсера на PHP для 1С-Битрикс — автоматический импорт товаров
Средний
~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 Appointment Booking Widget for a Medical Center
    751
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    872
  • 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-решения за счёт прямого доступа к API. Свяжитесь с нами — оценим задачу за один рабочий день.

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

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

Парсер состоит из четырёх компонентов:

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

  2. HTTP-клиент. Для простых задач — cURL через CHttpClient из ядра Битрикс или нативный curl_multi для параллельных запросов. Для сложных — Guzzle с middleware для retry, логирования, ротации прокси. Подробнее о параллельных запросах — в документации 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 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, интегрируем с инфоблоками и внешними системами.
  4. Тестирование — нагрузочное тестирование на реальных данных, имитация сбоев.
  5. Документация и передача — описание архитектуры, инструкция по эксплуатации, обучение разработчика.

Что вы получаете

  • Работающий парсер, встроенный в вашу копию 1С-Битрикс.
  • Полную документацию и комментарии в коде.
  • Гарантию на работу парсера в течение 3 месяцев после сдачи проекта.
  • Бесплатное постпроектное сопровождение.

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

Закажите разработку парсера — мы гарантируем результат и полную документацию. Получите консультацию инженера бесплатно.