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

Ручное обновление каталога из прайс-листов поставщиков — это рутина, которая приводит к ошибкам и дублям. Мы разрабатываем парсеры на PHP для 1С-Битрикс, которые автоматически забирают данные из любых источников и заливают их в инфоблоки. Наша команда реализует проект под ключ — от аудита до поддержки, обеспечивая надёжное и масштабируемое решение.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка парсера на PHP для 1С-Битрикс — автоматический импорт товаров
Средний
~1-2 недели

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

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1530
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1044
  • Разработка виджета онлайн-записи на прием для медицинского центра
    Разработка виджета онлайн-записи на прием для медицинского центра
    819
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    908
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    852
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1206

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

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