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

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

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

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Парсинг статей та контенту для автозаповнення 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 — додатковий юридичний ризик.
  • Обмеження частоти — 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

Розділення на три задачі дозволяє контролювати кожен етап незалежно та швидко локалізувати проблему при збої.