Парсинг изображений товаров для наполнения 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С. Логика:
- Проверяем
PREVIEW_PICTURE— если 0 или пустой, добавляем. - Для галереи — добавляем только если свойство
MORE_PHOTOпустое. - Помечаем парсинговые фото меткой в имени файла (
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. Гарантируем, что после парсинга все изображения будут корректно привязаны, а дубликаты исключены. Свяжитесь с нами для оценки вашего проекта — мы подготовим предложение в течение дня. Получите консультацию по автоматизации каталога.







