Парсинг изображений товаров для наполнения 1С-Битрикс

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

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

Этапы разработки

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1330
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    924
  • 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
    672
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    815
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    714
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1051

Парсинг изображений товаров для наполнения 1С-Битрикс

Каталог без изображений не продаёт. Мы знаем это не понаслышке: на одном из проектов для интернет-магазина электроники требовалось загрузить 15 000 фото от 50 поставщиков. Ручная загрузка заняла бы месяц. Мы написали парсер, который справился за два дня. Недавно к нам обратился интернет-магазин запчастей с каталогом в 20 тыс. позиций. Поставщик предоставлял изображения только по API, но API отдавал ссылки с ограничением по времени. Мы разработали скрипт, который загружал фото параллельно, обрабатывал ошибки и привязывал к инфоблокам. Результат — полный каталог с изображениями за 3 дня. В этой статье расскажем, как автоматизировать загрузку изображений товаров в 1С-Битрикс, какие подводные камни встречаются и как их обойти.

Как Битрикс хранит изображения товаров

Изображения хранятся в таблице b_file, физически — в /upload/iblock/. Как указано в официальной документации по хранению файлов, элемент инфоблока связывается с изображением через поля: Изображения товаров хранятся в таблице b_file, а связь с элементами инфоблока осуществляется через поля PREVIEW_PICTURE и DETAIL_PICTURE.

  • PREVIEW_PICTURE — превью для листинга (ID записи в b_file)
  • DETAIL_PICTURE — основное фото для карточки
  • Свойство типа F (файл) или G (галерея) — для дополнительных изображений

Для галереи используется свойство типа F с флагом MULTIPLE = Y. Стандартный компонент bitrix:catalog.element берёт изображения из этого свойства.

Скачивание и сохранение: пошаговая инструкция

Процесс состоит из трёх этапов: скачать файл, сохранить через CFile, привязать к элементу.

// Шаг 1: скачивание файла (с таймаутом и повторными попытками)
$imageData = file_get_contents($imageUrl);

// Шаг 2: сохранение через CFile::MakeFileArray()
$tmpFile = tempnam(sys_get_temp_dir(), 'img_');
file_put_contents($tmpFile, $imageData);
$fileArray = CFile::MakeFileArray($tmpFile);
$fileArray['name'] = $filename;
$fileId = CFile::SaveFile($fileArray, 'iblock');

// Шаг 3: привязка к свойству галереи
CIBlockElement::SetPropertyValuesEx($elementId, $iblockId, [
    'MORE_PHOTO' => ['n0' => ['VALUE' => $fileId]]
]);

Для нескольких изображений используем индексы n0, n1, n2 и т.д. Важно: при большом количестве файлов используйте агенты или queue-обработку, чтобы не превысить лимиты выполнения.

Проблемы при скачивании изображений

Защита от хотлинкинга. Многие сайты-источники проверяют Referer. Передаём корректный заголовок:

$client->get($url, ['headers' => ['Referer' => 'https://source-site.com']]);

Качество изображений. Не все найденные фото пригодны для каталога. Проверяем минимальный размер перед сохранением:

$imageInfo = getimagesizefromstring($imageData);
if ($imageInfo[0] < 300 || $imageInfo[1] < 300) continue; // пропускаем мелкие

Дубликаты. Один и тот же URL может встречаться на разных страницах. Кешируем уже скачанные URL → file_id в памяти или в отдельной таблице.

Извлечение URL изображений с источника

Для одного главного фото:

$src = $crawler->filter('.product-image img')->attr('src');

Для галереи — часто изображения в data-атрибутах или внутри JavaScript. Пример с data-атрибутами:

$crawler->filter('[data-image]')->each(function($node) use (&$urls) {
    $urls[] = $node->attr('data-image');
});

Если массив изображений лежит в JSON-LD, парсим его стандартным json_decode.

Обработка уже существующих изображений

Не затираем фото, загруженные вручную или из 1С. Логика:

  1. Проверяем PREVIEW_PICTURE — если 0 или пустой, добавляем.
  2. Для галереи — добавляем только если свойство MORE_PHOTO пустое.
  3. Помечаем парсинговые фото меткой в имени файла (parsed_ prefix) для последующей идентификации.

Почему парсинг выгоднее ручной загрузки?

Парсинг изображений в 10 раз быстрее ручного наполнения и обходится в 3-5 раз дешевле. Это позволяет существенно экономить бюджет на наполнение каталога.

Параметр Ручная загрузка Парсинг
Время на 10 000 фото 20–30 рабочих дней 2–4 дня
Ошибки ввода Высокая вероятность опечаток и несоответствий Минимальная (после отладки скрипта)
Стоимость Высокая (оплата труда менеджеров) Низкая (однократная разработка)
Масштабируемость Ограничена человеческими ресурсами Легко масштабируется на любой объём

Парсинг окупается уже на каталоге от 500 товаров. Кроме того, автоматизация исключает "человеческий фактор" — перепутанные фото или неправильные привязки остаются в прошлом.

Как избежать дубликатов при парсинге?

Дубликаты возникают, когда один и тот же URL скачивается несколько раз. Решение — вести учёт уже обработанных URL. Простейший способ: хранить массив url => file_id в памяти скрипта или в отдельном HL-блоке. При повторной встрече URL сразу используем сохранённый file_id.

Что входит в нашу работу по парсингу изображений?

  • Анализ источника — определение структуры страниц, методов доступа (API, парсинг HTML), оценка объёма.
  • Разработка парсера — скрипт на PHP, учитывающий особенности источника (AJAX, защита, капча).
  • Обработка ошибок — retry при временных сбоях, логирование неудач, уведомление о проблемах.
  • Привязка к инфоблокам — создание новых элементов или обновление существующих, заполнение PREVIEW_PICTURE, DETAIL_PICTURE и свойств галереи.
  • Тестирование — прогон на 100–500 товарах, проверка качества изображений, соответствие размерам.
  • Документация — описание архитектуры скрипта, инструкция по запуску и поддержке.
  • Сопровождение — если источник изменится, мы адаптируем парсер (договор на поддержку).

Ориентировочные сроки

Этап Срок
Анализ структуры источника 2–4 часа
Скачивание, валидация, сохранение через CFile 1–2 дня
Привязка к элементам инфоблока (превью + галерея) 4–8 часов
Обработка ошибок, retry, логирование 4 часа
Тестовый прогон на 500 позициях 4 часа
Итого 3–5 рабочих дней

При каталоге от 10 000 изображений добавляется 1–2 дня на параллелизацию загрузки. Точные сроки зависят от сложности источника и требований к качеству.

Наш опыт и гарантии

Мы занимаемся разработкой на 1С-Битрикс более 5 лет и реализовали 30+ проектов по наполнению каталогов. Наши инженеры сертифицированы и знают все тонкости API. Гарантируем, что после парсинга все изображения будут корректно привязаны, а дубликаты исключены. Свяжитесь с нами для оценки вашего проекта — мы подготовим предложение в течение дня. Получите консультацию по автоматизации каталога.