Автонаполнение сайта данными из парсера: маппинг, модерация, публикация

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

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Автонаполнение сайта данными из парсера: маппинг, модерация, публикация
Средний
~5 дней
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1362
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1253
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    958
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1190
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    931
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    949

Представьте: интернет-магазин с 50 000 товаров, данные поставляют три партнёра с разными форматами. Прямой импорт через сутки приводит к 15% дублей и битых ссылок — сайт теряет позиции в выдаче. Мы разработали систему, которая исключает такие проблемы через конвейер: парсер → нормализация → модерация → публикация. Но просто скопировать данные из парсера в базу — наивный подход, который не масштабируется. Без промежуточной обработки вы рискуете получить мусор: дубликаты, битые изображения, невалидные цены. Кроме того, каждый поставщик присылает данные в своём формате: один использует JSON с вложенными полями, другой — XML с атрибутами. Нам нужно унифицировать всё в единую структуру, проверить качество и только потом публиковать. Автоматическое наполнение контентом через интеграцию парсера и CMS требует системного подхода, иначе веб-скрапинг превращается в хаос. Ниже разберём ключевые узлы и их реализацию.

Какие проблемы возникают при прямом импорте?

Прямой импорт из парсера в базу сайта — плохая практика. Вот типичные ошибки:

  • Дубликаты — одинаковые товары с разными ID из-за повторного парсинга.
  • Битые изображения — ссылки на внешние ресурсы, которые удалили.
  • Невалидные цены — 0 руб. или 999 999 999 руб. из-за ошибки источника.
  • Разная структура — у каждого поставщика свой формат: один передаёт артикул в поле article, другой — в sku.

Мы решаем это через промежуточный слой: очередь с валидацией и нормализацией.

Почему нужна промежуточная очередь?

Очередь буферизирует данные и даёт возможность применить бизнес-логику: объединение дублей, трансформация форматов, обогащение из внешних API. Без очереди при сбое парсера вы рискуете получить в CMS мусор, который придётся чистить руками. Использование очереди снижает количество ошибок публикации в 5 раз по сравнению с прямым импортом. Также это позволяет обрабатывать до 10 000 записей в минуту без потери производительности.

Как реализована дедупликация?Используется хеширование по комбинации полей: title + sku + supplier_id. При появлении дубля запись помечается как duplicate и не публикуется. В случае обновления данных, старое значение заменяется новым.

Как настроить маппинг полей для любого источника?

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

{
  "source": "supplier_catalog",
  "mappings": {
    "title": "$.name",
    "description": "$.full_description",
    "price": "$.price_rub",
    "category": { "field": "$.category_id", "transform": "category_map" },
    "images": "$.photos[*].url",
    "sku": "$.article"
  },
  "category_map": {
    "1": "electronics",
    "2": "clothing",
    "15": "home-garden"
  }
}

Такой подход снижает время адаптации нового источника до нескольких часов. Маппинг через JSONPath в 3 раза быстрее, чем написание кастомных скриптов для каждого источника.

Как обрабатываются изображения?

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

async def process_image(url: str, product_id: int) -> str:
    async with httpx.AsyncClient() as client:
        resp = await client.get(url, timeout=30)

    img = Image.open(BytesIO(resp.content))
    img = img.convert('RGB')

    # ресайз с сохранением пропорций
    img.thumbnail((1200, 1200), Image.LANCZOS)

    # сохранение в WebP
    output = BytesIO()
    img.save(output, 'WEBP', quality=85)

    # загрузка в S3/MinIO
    s3_key = f'products/{product_id}/{uuid4()}.webp'
    s3.put_object(Bucket=BUCKET, Key=s3_key, Body=output.getvalue())

    return f'https://cdn.example.com/{s3_key}'

WebP уменьшает размер файла до 30% без потери качества, а хранение на собственном CDN ускоряет загрузку страниц (снижение LCP на 40%). Дополнительно настраивается кэширование на CDN с временем жизни 7 дней для изображений.

Контроль качества и стратегии публикации

Перед публикацией данные проходят валидацию по трём уровням:

  • Обязательные поля: название, цена, хотя бы одна фотография.
  • Диапазон цены: от 1 до 1 000 000 единиц (защита от ошибок источника).
  • Описание: не короче 50 символов.
  • Изображения: доступны, ширина не менее 300 px.

Записи, не прошедшие проверку, попадают в статус review_required и требуют ручного одобрения.

Три стратегии публикации:

Стратегия Время публикации Риск ошибок Ручная работа
Авто-публикация Секунды Средний (доверенный источник) Нет
Черновик Часы/дни Низкий (редактор проверит) Есть
Дифф-обновление Секунды Низкий (только изменения) Нет

Выбор стратегии зависит от надёжности источника и критичности данных.

Процесс работы

  1. Аналитика — изучаем структуру парсера и полей CMS.
  2. Проектирование — разрабатываем схему маппинга и очереди.
  3. Реализация — пишем процессор на Python, валидатор по правилам, интеграцию с CMS через API.
  4. Тестирование — прогоняем на исторических данных (10 000 записей), проверяем edge-кейсы.
  5. Деплой — разворачиваем на продакшн, настраиваем мониторинг ошибок.

Что входит в работу

  • Анализ структуры парсера и полей CMS
  • Разработка схемы маппинга
  • Настройка промежуточной очереди и валидации
  • Интеграция через API CMS
  • Документация по конфигурации и поддержке
  • Обучение редакторов работе с очередью и модерацией
  • Техническая поддержка на этапе запуска

Сроки

Сложность Время
Один источник, базовая валидация 5–8 дней
Несколько источников, UI маппинга, модерация 15–20 дней

Закажите консультацию для оценки вашего проекта — мы подберём оптимальную архитектуру интеграции. Свяжитесь с нами, чтобы обсудить автоматическое наполнение вашего сайта.

Разработка систем управления контентом: WYSIWYG, медиабиблиотека, мультиязычность

Мы интегрируем и разрабатываем CMS с нуля — под редакторские сценарии, а не под «модный стек». Если в админке неудобно менять заголовок или ломается форматирование при вставке из Word — контент не обновляется, теряются продажи. Наша команда с 6+ лет опыта решает это через структурированный контент, кастомные WYSIWYG-редакторы и облачные медиабиблиотеки.

Когда headless CMS оправдана, а когда — нет

Headless CMS (Strapi, Contentful, Sanity) отделяет управление контентом от фронтенда: API отдаёт контент любому клиенту — сайту, мобильному приложению, digital signage. Выбор для омниканальных проектов и когда фронтенд на React/Vue/Next.js. Но если у вас нет отдельного фронтенд-проекта и редакторы привыкли к визуальному редактированию — headless может усложнить жизнь: придётся отдельно делать предпросмотр.

Sanity — кастомизируемая Studio: каждое поле — React-компонент, который можно заменить. Portable Text (формат для rich content) портируется в любой рендерер. Для сложных редакторских workflow — лучший выбор. Contentful — стабильный облачный сервис с marketplace расширений, но цена растёт с объёмом контента. Strapi — self-hosted, open source, TypeScript API, кастомные поля через плагины.

Традиционные CMS (WordPress, Craft CMS) — когда нужен привычный редакторский интерфейс и нет отдельного фронтенд-проекта. Craft CMS даёт Matrix поля, гибкую структуру записей, встроенную локализацию — это профессиональный инструмент для контент-команд.

Как мы строим WYSIWYG-редактор, который не ломает вёрстку

Редактор — отдельная инженерная задача, не просто <textarea>. Лучший баланс — Tiptap (надстройка над ProseMirror): каждый элемент — расширение (заголовки, списки, таблицы, блоки кода), collaborative editing через Yjs встроено. Lexical (от Meta) — производительнее, но сложнее в настройке. TinyMCE — корпоративный стандарт, но тяжеловат по бандлу (~300KB) и генерирует много грязного HTML.

Главная проблема — вставка из Word. &nbsp;, inline-стили, вложенные <span> — без sanitize на вставку вёрстка ломается, SEO страдает. Мы используем DOMPurify или настраиваем ProseMirror pasteRule для очистки. Результат — чистый HTML, который не меняется при редизайне.

Медиабиблиотека: от загрузки до CDN

Загружать файлы через <input type="file"> на диск сервера — антипаттерн. Диск переполнится, масштабирование невозможно, CDN не подключить. Правильная схема: загрузка в S3-совместимое хранилище (AWS S3, Cloudflare R2, MinIO) → CDN (CloudFront, Cloudflare) → трансформации по запросу.

Imgproxy или Thumbor генерируют любые размеры и форматы динамически: https://img.example.com/resize:800:600/format:webp/plain/s3://bucket/photo.jpg. Оригинал хранится один раз, производные не занимают место. Cloudflare Images — managed-сервис, $5 за 100k изображений с трансформациями.

Для видео — Cloudflare Stream или Mux: загружаете исходник, платформа кодирует в HLS, отдаёт адаптивный стриминг. Без этого видео весит 500MB и грузится целиком.

Что входит в разработку медиабиблиотеки

Компонент Технология Срок (недели)
Загрузка и хранение в S3 AWS SDK / MinIO 1–2
Трансформации изображений Imgproxy / Thumbor 1–2
Видеостенд Cloudflare Stream / Mux 1–2
Интерфейс загрузки и сортировки React + @dnd-kit/sortable 1–3
Миграция существующих файлов Кастомный скрипт 0.5–1

Структурированный контент vs free-form HTML

Free-form WYSIWYG через год даёт хаос: 7 размеров шрифта, 12 цветов, случайные отступы. Редизайн без ручной чистки невозможен. Структурированный контент — вместо «как оно выглядит» храним «что это есть». Не <p style="font-size:24px; color:red">Важно!</p>, а тип блока callout с параметром variant: warning. CMS хранит структуру, фронтенд решает, как рендерить. Sanity Portable Text, Contentful Rich Text, Strapi Dynamic Zones — все они идут в этом направлении.

Процесс работы

  1. Анализ редакторских сценариев — кто редактирует, как часто, какой контент, нужна ли локализация.
  2. Выбор CMS под сценарии, а не по трендам.
  3. Проектирование контент-модели — типы записей, поля, связи.
  4. Реализация — интеграция с фронтендом, кастомизация редактора, медиабиблиотека.
  5. Тестирование — проверка на реальных сценариях, загрузка 100+ файлов, нагрузочное тестирование.
  6. Деплой и документация — инструкция для редакторов, описание API, доступы.

Сроки и бюджет

Тип работы Срок Типичный бюджет
Интеграция headless CMS (Strapi/Sanity) в существующий Next.js проект 2–5 недель от 150 000 ₽
Кастомный WYSIWYG-редактор с Tiptap и специфичными блоками 2–4 недели от 120 000 ₽
Медиабиблиотека с S3 + трансформации 1–3 недели от 80 000 ₽
Полная CMS-система с нуля 4–10 недель от 400 000 ₽

Бюджет рассчитывается индивидуально после аудита. Свяжитесь с нами — оценим ваш проект за один день.

Что вы получите после завершения

  • Рабочая CMS с настроенными правами доступа
  • Документация по контент-модели и API
  • Инструкция для редакторов (текст + видео)
  • Код, покрытый тестами (PHPUnit для Laravel, Jest для JS)
  • Поддержка 1 месяц после деплоя

Наш опыт

6 лет на рынке, 40+ выполненных проектов. Разрабатывали CMS для интернет-магазинов, корпоративных порталов, новостных изданий. Используем лицензионное ПО (sentry.io, sonarcloud) — гарантируем качество кода.

Источник: внутренняя статистика проектов за 2018–2024 гг.

Подробнее о WYSIWYG-редакторах читайте в Wikipedia.

Остались вопросы?

Закажите консультацию — мы поможем выбрать архитектуру и оценить сроки. Получите предложение в течение 2 рабочих дней.