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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Парсинг статей и контента для автонаполнения 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

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

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

Отличие от парсинга новостей

Новостной парсер работает с RSS-фидами — структурированными, предсказуемыми данными. Парсинг статей — это работа с произвольными HTML-страницами, где каждый сайт-источник имеет свою вёрстку, структуру навигации и способ представления контента.

Ключевые отличия:

  • Нет единого формата — каждый источник требует индивидуального парсера или универсального экстрактора.
  • Сложная структура контента — статья содержит заголовки, списки, таблицы, встроенные медиа, блоки кода. Всё это нужно сохранить.
  • Объём текста — статья в 5 000–10 000 символов против 500-символьной новости. Больше данных — больше точек отказа.
  • Частота обновления — статьи публикуются реже новостей, но каждая единица контента ценнее.

Извлечение контента из HTML

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

1. CSS-селекторы под конкретный сайт. Для каждого источника определяется селектор основного контента: article.post-content, div#main-text, .entry-body. Надёжно работает для ограниченного набора источников, ломается при редизайне.

2. Алгоритмы извлечения контента. Библиотеки типа Readability (порт Mozilla Readability на PHP — andreskrey/readability.php) анализируют DOM и выделяют основной контент по эвристикам: плотность текста, соотношение ссылок к тексту, семантические теги <article>, <main>.

3. Гибридный подход. Readability для первичного извлечения + кастомные правила для конкретных источников, где автоматика ошибается.

На практике гибридный подход — единственный, который работает для 10+ источников. Чистая автоматика теряет важные блоки (таблицы, списки), чистые селекторы не масштабируются.

Сохранение структуры и форматирования

После извлечения HTML нужно привести его к формату, пригодному для хранения в DETAIL_TEXT инфоблока Битрикс:

  • Очистка — удаление <script>, <style>, <iframe>, inline-стилей, data-атрибутов. Используйте HTMLPurifier с кастомной конфигурацией, разрешающей <h2>–<h4>, <p>, <ul>, <ol>, <li>, <table>, <img>, <a>, <strong>, <em>, <blockquote>, <pre>, <code>.
  • Нормализация заголовков — исходный <h1> статьи становится <h2> в контексте страницы Битрикс (где <h1> — заголовок элемента).
  • Локализация изображений — скачивание внешних картинок в /upload/, замена URL в HTML. Без этого изображения пропадут при блокировке источника или смене URL.
  • Ленивая загрузка — многие сайты используют data-src вместо src для картинок. Парсер должен это учитывать.

Маппинг в инфоблок

Извлечённые данные Поле инфоблока Обработка
Заголовок <h1> / <title> NAME Обрезка до 255 символов, очистка HTML
Первые 300 символов текста PREVIEW_TEXT strip_tags() + обрезка по границе предложения
Полный HTML статьи DETAIL_TEXT Очистка через HTMLPurifier
Первое изображение PREVIEW_PICTURE Скачивание + ресайз
URL источника PROPERTY_SOURCE_URL Без изменений
Дата публикации ACTIVE_FROM Парсинг через strtotime()
md5(url) XML_ID Для дедупликации
Автор PROPERTY_AUTHOR Извлечение из meta или byline
Теги / ключевые слова PROPERTY_TAGS Множественное свойство типа «строка»

Пошаговый процесс парсинга

Шаг 1. Сбор URL. Парсер обходит страницы-списки (пагинация, категории, sitemap.xml) и собирает URL статей. Сохраняет в очередь — таблицу parser_queue с полями url, status, created_at.

Шаг 2. Загрузка и извлечение. Для каждого URL из очереди: загрузка HTML, извлечение контента, парсинг метаданных. Результат — структурированный массив, сохраняемый в промежуточную таблицу parser_articles.

Шаг 3. Модерация (опционально). Администратор просматривает спарсенные статьи в интерфейсе, одобряет или отклоняет. Для полной автоматизации этот шаг заменяется фильтрацией по правилам.

Шаг 4. Импорт. Одобренные статьи загружаются в инфоблок через CIBlockElement::Add(). Изображения сохраняются через CFile::MakeFileArray().

Работа с защитой от парсинга

Контентные сайты защищаются слабее, чем маркетплейсы, но базовые меры присутствуют:

  • robots.txt — проверяйте Disallow для парсируемых разделов. Игнорирование robots.txt — дополнительный юридический риск.
  • Rate limiting — 1–2 запроса в секунду безопасны для большинства сайтов. Агрессивный парсинг (10+ rps) приведёт к блокировке.
  • JavaScript-рендеринг — SPA-сайты требуют headless-браузера. Для статичных сайтов достаточно cURL.
  • Cloudflare / WAF — определяют ботов по fingerprint. Решается через headless-браузер с реалистичными заголовками.

Автоматизация в cron

Рекомендуемая структура cron-задач:

# Сбор новых URL из источников — раз в сутки
0 2 * * * php /home/bitrix/parsers/collect_urls.php

# Парсинг статей из очереди — каждые 2 часа
0 */2 * * * php /home/bitrix/parsers/parse_articles.php --limit=50

# Импорт в инфоблок — каждый час
0 * * * * php /home/bitrix/parsers/import_articles.php

Разделение на три задачи позволяет контролировать каждый этап независимо и быстро локализовать проблему при сбое.