Покажу на простом примере, в заметке будет расширенный вариант с парсингом товаров каталога.
У нас есть некая страница, с такой HTML структурой:
| Код |
|---|
<div class="it"> <h4 class="ti">Сайдинг-Россия</h4> <div class="con"> Официальный дистрибьютор<br> 140300, Московская область, г. Егорьевск, ул. Рязанская, д.107с1<br> телефон: +7 (966) 000-36-36<br> график работы: ежедневно 9:00—18:00<br> email: siding-russia@mail.ru<br> https://siding-russia.ru/ </div> </div> <div class="it"> <h4 class="ti">Виниловая торговая компания</h4> <div class="con"> Официальный дистрибьютор<br> 141212, Московская область, Пушкинский городской округ, село Тарасовка, ул. Центральная, вл.52, стр. 2<br> телефон: +7 (495) 799-45-67<br> график работы: пн — вс 09:00 — 18:00<br> email: sale2@vtcopt.ru<br> https://vtcopt.ru/ </div> </div> И так далее любое количество таких блоков |
Нам нужно спарсить к себе на сайт при этом каждая строка должна заполниться в свойства инфоблока с соответствующим содержимым.
Для этого нам нужны коды или ID заведомо созданных свойств инфоблока.

Используем следующий скрипт для парсинга:
| Код |
|---|
<?php
// Подключение ядра битрикса
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
// Указываем URL страницы, которую нужно скачать и распарсить
$url = 'http/пример-сайта.ru/1.php'; // Замените на нужный сайт и путь
// Загружаем HTML страницы через cURL (можно и через file_get_contents, если настройки позволяют)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Если нужно, можно добавить настройки авторизации, прокси, юзер-агент и т.п.
$html = curl_exec($ch);
curl_close($ch);
// Проверка успешной загрузки
if (!$html) {
die("Ошибка загрузки страницы");
}
// Создаем DOMDocument и загружаем HTML
$dom = new DOMDocument();
libxml_use_internal_errors(true); // Отключаем ошибки парсера из-за некорректного HTML
$dom->loadHTML($html);
libxml_clear_errors();
// Используем XPath для поиска нужных элементов
$xpath = new DOMXPath($dom);
// Ищем все блоки с классом 'it'
$blocks = $xpath->query("//*[contains(@class, 'it')]");
$result = []; // Массив для хранения данных
foreach ($blocks as $block) {
// В каждом блоке ищем заголовок h4 с классом 'ti'
$titleNode = $xpath->query(".//h4[@class='ti']", $block)->item(0);
$title = $titleNode ? trim($titleNode->nodeValue) : '';
// Внутри блока ищем div с классом 'con'
$conNode = $xpath->query(".//div[@class='con']", $block)->item(0);
if ($conNode) {
// Получаем HTML содержимого div, чтобы разбивать по <br>
$conHTML = $dom->saveHTML($conNode);
// Разбиваем по тегам <br> (учитываем оба варианта: <br> и <br/>)
$lines = preg_split('/<br\s*\/?>/i', $conHTML);
// Очистка каждой линии от тегов и пробелов
$linesClean = array_map(function($line) {
return trim(strip_tags($line));
}, $lines);
// Добавляем данные в массив
$result[] = [
'TITLE' => $title,
'CONTENT_LINES' => $linesClean,
];
}
}
// Обработка результатов: добавляем в инфоблок
// Подключаем модуль инфоблоков
CModule::IncludeModule("iblock");
// Создаем объект для добавления элементов
$el = new CIBlockElement;
// Идентификатор инфоблока, куда добавляем
$IBLOCK_ID = 4; // Замените на ваш ID инфоблока
foreach ($result as $item) {
// Тут можно просматривать данные перед добавлением
//echo '<pre>';
//print_r($item);
//echo '</pre>';
// Формируем свойства для элемента
$PROP = array();
// Предполагая, что у вас есть определенные свойства по номерам:
// Пример адаптируйте под свои свойства:
if (isset($item['CONTENT_LINES'][0]))
$PROP[25] = trim($item['CONTENT_LINES'][0]); // например, адрес
if (isset($item['CONTENT_LINES'][1]))
$PROP[29] = trim($item['CONTENT_LINES'][1]); // телефон
if (isset($item['CONTENT_LINES'][2]))
$PROP[26] = trim($item['CONTENT_LINES'][2]); // И так далее
if (isset($item['CONTENT_LINES'][3]))
$PROP[28] = trim($item['CONTENT_LINES'][3]);
if (isset($item['CONTENT_LINES'][4]))
$PROP[27] = trim($item['CONTENT_LINES'][4]);
if (isset($item['CONTENT_LINES'][5]))
$PROP[30] = trim($item['CONTENT_LINES'][5]);
if (isset($item['CONTENT_LINES'][6]))
$PROP[37] = trim($item['CONTENT_LINES'][6]);
// Создаем массив данных для нового элемента
$fields = [
'IBLOCK_ID' => $IBLOCK_ID,
'NAME' => $item['TITLE'], // название элемента
'PROPERTY_VALUES' => $PROP,
'ACTIVE' => 'Y',
// Можно добавить 'PREVIEW_TEXT' или 'DETAIL_TEXT', если нужно
//'PREVIEW_TEXT' => implode("\n", $item['CONTENT_LINES']),
];
// Добавляем элемент инфоблока
$elementId = $el->Add($fields);
if (!$elementId) {
echo 'Ошибка добавления элемента: ', $el->LAST_ERROR, "<br>";
} else {
echo "Добавлен элемент ID: ", $elementId, "<br>";
}
}
// Подключаем завершающую часть битрикса
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php');
?> |