Парсер для сайта на движке Bitrix(с модулем iBlock)

Author Автор: Роман Чернышов    Опубликовано: 6 мая 2021

Парсер для сайта на движке BitrixCMS Bitrix, она же «1С-Битрикс: Управление сайтом» особо в представлении не нуждается, без преувеличения на сегодняшний день, это одна из самых популярных коммерческих CMS в российском сегменте интернета для управления контентом сайта. Сегодня я хочу рассказать о скрипте-парсере, разработкой которого я занимался в последнее время, предназначенного для сбора данных со сторонних источников и публикации их на сайт под управлением CMS Bitrix, в частности в модуль Информационные блоки(iBlock). Пару слов о модуле iBlock — это мощный и гибкий механизм для хранения и выборки информации различными способами, применяется для расширения стандартного функционала CMS Bitrix.

О парсере

Ранее я уже рассказывал о парсере для XenForo, данный же парсер для Bitrix построен на том же движке, и в своей основе имеет схожий алгоритм и принцип работы. Парсер состоит из двух частей: серверная часть — написанная на PHP, и клиентская часть — написанная на JavaScript, которая работает на стороне браузера через UserScript(дополнение Violentmonkey для Chrome) или же по средствам «безголового» браузера по типу PhantomJS. Такая реализация позволяет с легкостью имитировать действия реального пользователя, обходить защиту от ботов, в том числе некоторые версии Google reCapcha и защиту от DDOS которую предоставляют такие сервисы как Cloudflare(например) — разумеется исключительно для легального доступа к контенту, без нарушения каких либо законодательных норм.

Данное решение, мною уже протестировано в десятках проектов, гибкость и простата настройки позволяет получать данные любого типа, также парсер можно легко адаптировать под любую структуру контента сайта донора: форум, каталог товаров, информационный портал, статистика или справочная информация, также получаемый тип контента может быть любым: текст, фото, аудио, видео и т.д.

Логика работы парсера

Под логикой работы я подразумеваю порядок сбора информации, а также очередность обхода разделов и страниц сайта. В зависимости от типа сайта(форум, каталог, интернет магазин, информационный портал и т.д.), логика работы парсера может отличаться.

  • Первичная настройка парсера на сайт донора, с указанием где и какие данные ему собирать, обучить «пониманию» структуры HTML страниц донора (задача не сложная, например прописать путь в xPath или с использованием селекторов jQuery до заголовка страницы H1);
  • Обход первичной страницы сайта — каталога, сбор ссылок на товары или объявления;
  • Обход страниц с товарами или объявлениями, сбор всех необходимых данных;
  • В случае постраничной разбивки в каталоге товаров или объявлений, обход всех страниц;
  • Обход профилей компаний опубликовавших объявления, если таковые есть;

Сохраняем данные в базу данных Bitrix

Все данные полученные парсером сохраняются в базу данных, а именно в модуль iBlock — Информационные блоки (в таблицы данного модуля), но при необходимости парсер можно настроить и на работу с другими модулями CMS. Далее я расскажу какие таблицы модуля iBlock задействуются.

Cохраняем объявления(запись в iBlock)

Таблица: b_iblock_element
Запрос:

INSERT INTO `b_iblock_element` 
	(`ID`, `TIMESTAMP_X`, `MODIFIED_BY`, `DATE_CREATE`, `CREATED_BY`, `IBLOCK_ID`, `IBLOCK_SECTION_ID`, `ACTIVE`, 
	`ACTIVE_FROM`, `ACTIVE_TO`, `SORT`, `NAME`, `PREVIEW_PICTURE`, `PREVIEW_TEXT`, `PREVIEW_TEXT_TYPE`, `DETAIL_PICTURE`, 
	`DETAIL_TEXT`, `DETAIL_TEXT_TYPE`, `SEARCHABLE_CONTENT`, `WF_STATUS_ID`, `WF_PARENT_ELEMENT_ID`, `WF_NEW`, `WF_LOCKED_BY`, 
	`WF_DATE_LOCK`, `WF_COMMENTS`, `IN_SECTIONS`, `XML_ID`, `CODE`, `TAGS`, `TMP_ID`, `WF_LAST_HISTORY_ID`, `SHOW_COUNTER`, 
	`SHOW_COUNTER_START`) 
VALUES
	('',	'{$date}',	2,	'$date',	2,	2,	{$SectionID},	'Y',	NULL,	NULL,	500,	'{$title}',	
	NULL,	NULL,	'text',	NULL,	'{$description}',	'html',	'{$content}',	1,	NULL,	NULL,	
	NULL,	NULL,	NULL,	'Y',	'0',	NULL,	NULL,	'0',	NULL,	2,	'{$date}');

В данном запросе стоит обратить внимания на значения полей, в которых представлены следующие переменные:
$date — дата в формате Unix Timestamp;
$SectionID — ID раздела/секции модуля iBlock к которому будет относится данная запись;
$title — Заголовок записи;
$description — Краткое описание;
$content — Полный текст записи.

Cохраняем свойства(статичные) к записи

Таблица: b_iblock_element_iprop
Запрос:

INSERT INTO `b_iblock_element_iprop` (`IBLOCK_ID`, `SECTION_ID`, `ELEMENT_ID`, `IPROP_ID`, `VALUE`) VALUES
	({$IBLOCK_ID}, {$SectionID}, {$lastID}, {$IPROP_ID}, '{$content}');";

В данном запросе стоит обратить внимания на значения полей, в которых представлены следующие переменные:
$IBLOCK_ID — ID типа контента созданного информационного блока в рамках модуля iBlock, как правило значение одинаково для всех записей;
$SectionID — ID раздела/секции модуля iBlock к которому будет относится данная запись;
$lastID — ID записи к которой относится данное дополнительное свойство;
$IPROP_ID — ID свойства;
$content — Значение свойства.

Cохраняем дополнительные(настраиваемые) свойства к записи

Таблица: b_iblock_element_iprop
Запрос:

INSERT INTO `b_iblock_element_property` (`IBLOCK_PROPERTY_ID`, `IBLOCK_ELEMENT_ID`, `VALUE`, `VALUE_TYPE`, `VALUE_ENUM`, `VALUE_NUM`, `DESCRIPTION`) 
VALUES ({$IBLOCK_PROPERTY_ID}, {$lastID}, '{$name}', 'text', NULL, {$value}, {$description});

В данном запросе стоит обратить внимания на значения полей, в которых представлены следующие переменные:
$IBLOCK_PROPERTY_ID — ID типа дополнительного свойства;
$lastID — ID записи к которой относится данное дополнительное свойство;
$name — Название свойства;
$value — Значение свойства;
$description — Описание свойства.

Технические характеристики

Парсер состоит из двух частей, серверная часть на PHP 7 которая отдает команды и клиентская часть на JavaScript, которая получает команды, обходит страницы сайта и собирает нужные данные. Для работы клиентской части используется UserScript(дополнение Violentmonkey для Chrome) или же PhantomJS. Со страницами парсер работает по средствам CSS селекторов jQuery или xPatch. Клиентская и серверная часть общаются между собой используя Ajax запросы по протоколу HTTPS, данные передаются в формате Json.

Заключение

Как я ранее уже не раз говорил, все мои парсеры построены на одной платформе и основным их преимуществом является то, что их можно настраивать под парсинг из любых источников и на загрузку данных в любые проекты, будь то Bitrix, WordPress, joomla, XenForo или самописный движок. Если у вас есть потребность в парсинге данных — обращайтесь, буду раз поработать с вами!

Оставить комментарий

Автор блога
Чернышов Роман
Роман Чернышов
Веб-разработчик, Full Stack
Senior, Architector
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка