Инструменты

Структурированные данные из любого сайта для LLM: разбор Lightfeed Extractor

Lightfeed Extractor — open source TypeScript-библиотека, которая превращает веб-страницы в валидированные структурированные данные для LLM. Разбираю архитектуру, ключевые фичи и практические сценарии использования.

28 марта 2026 г.
5 мин чтения
LLMвеб-скрапингTypeScriptZodPlaywrightopen sourceструктурированные данныепарсинг

Проблема: почему обычные парсеры не справляются

Каждый, кто строил пайплайны для извлечения данных с веб-сайтов, знает боль. Написал парсер под конкретную вёрстку — сайт обновился, парсер сломался. Добавил обработку краевых случаев — появились новые. Попробовал регулярки для динамического контента — получил хрупкий код, который разваливается при первом изменении CSS-класса.

LLM казались логичным решением: скорми HTML модели, попроси вернуть JSON. На практике всё сложнее. HTML-страница — это килобайты навигации, футеров и рекламных блоков. Токены сжигаются впустую. LLM возвращает невалидный JSON. Один битый элемент в массиве ломает всю структуру.

Lightfeed Extractor решает именно этот набор проблем — и делает это элегантно.

Что такое Lightfeed Extractor

Lightfeed Extractor — open source TypeScript-библиотека (github.com/lightfeed/extractor), которая закрывает полный пайплайн от URL до валидированных структурированных данных. Вышла из продакшн-использования команды Lightfeed и попала на главную страницу Hacker News.

Установка: npm install @lightfeed/extractor. Плюс LLM-провайдер на выбор — OpenAI, Google Gemini, Anthropic Claude или Ollama для локальных моделей. Всё через LangChain-совместимый интерфейс.

Архитектура: пять слоёв надёжности

1. HTML → LLM-ready Markdown

Первый этап — конвертация HTML в чистый Markdown. Библиотека вырезает навигацию, хедеры, футеры и рекламу, оставляя основной контент. Опционально сохраняет изображения. Чистит URL от трекинговых параметров.

Вместо 50 КБ сырого HTML модель получает 5 КБ чистого текста — критично для экономии токенов.

2. LLM-экстракция через Zod-схемы

Ядро библиотеки — функция extract(). Определяешь Zod-схему того, что хочешь получить, и передаёшь вместе с контентом. Zod-схема одновременно служит и описанием данных для LLM (через .describe()), и валидатором результата. Типобезопасность на входе и выходе.

3. Восстановление битого JSON

Главная техническая находка — safeSanitizedParser. LLM не всегда генерируют идеальный JSON. Один невалидный элемент массива обычно роняет весь парсинг.

safeSanitizedParser восстанавливает частичные данные: удаляет невалидные элементы из вложенных массивов, подставляет null для необязательных полей, спасает всё, что можно спасти. Вместо ошибки «invalid JSON» получаешь 95% данных.

Для продакшн-пайплайнов это разница между «упало на третьей странице из тысячи» и «обработало все тысячу с минимальными потерями».

4. Валидация и нормализация URL

Отдельный слой обрабатывает URL: разрешает относительные ссылки относительно sourceUrl, удаляет невалидные, чинит Markdown-экранированные ссылки.

5. Автоматизация браузера через Playwright

Встроенная интеграция с Playwright закрывает проблему JavaScript-рендеринга и SPA. Три режима работы: Local (обычный Playwright), Serverless (для облачных функций), Remote (подключение к удалённому браузеру). Встроенные anti-bot патчи и поддержка прокси.

Практический сценарий

Полный пайплайн — скрапинг каталога товаров. Определяешь Zod-схему с полями name, brand, price, rating, productUrl, imageUrl. Инициализируешь браузер Playwright, переходишь на страницу. Вызываешь extract() с LLM, HTML-контентом и схемой. На выходе — типизированный массив продуктов. Не регулярки, не CSS-селекторы. Схема описывает что нужно, LLM находит это в контенте.

AI-навигация + экстракция

Для сложных сценариев (поиск товара, пагинация, попапы) работает связка с @lightfeed/browser-agent. Метод page.ai() принимает инструкцию на естественном языке: «Search for organic coffee and go to the second page». Никаких селекторов, никаких хрупких скриптов.

Сравнение с альтернативами

llm-scraper — похожая концепция, но без восстановления битого JSON, без встроенной очистки HTML и без AI-навигации.

Python-скраперы (Scrapy, BeautifulSoup + LLM) — требуют ручной настройки каждого этапа. Lightfeed Extractor даёт цельный пайплайн из коробки.

Коммерческие API (Diffbot, ScrapingBee) — закрытые, платные, привязка к провайдеру. Lightfeed Extractor — MIT-лицензия, любой LLM-провайдер.

Когда это реально полезно

  • Мониторинг цен конкурентов — схема один раз, работает на разных сайтах
  • Сбор датасетов для RAG — структурированные данные из произвольных источников
  • Агрегация контента — новости, обзоры, каталоги без привязки к вёрстке
  • Миграция данных — перенос контента между платформами

Ограничения

LLM-экстракция не бесплатна: каждая страница — запрос к модели. Для Gemini 2.5 Flash это копейки, для GPT-4o — ощутимо на масштабе. Скорость ниже, чем у детерминированных парсеров. Для real-time сценариев с миллисекундными SLA не подходит. Для пакетной обработки — отлично.

Итог

Lightfeed Extractor — зрелая, продакшн-проверенная библиотека, которая закрывает полный цикл веб-экстракции для LLM. Восстановление битого JSON, очистка HTML, валидация URL, автоматизация браузера и AI-навигация — всё в одном пакете.

Если вы строите пайплайны извлечения данных на TypeScript и устали чинить парсеры каждую неделю — Lightfeed Extractor стоит попробовать.

Автор: Алик Завалишев

Эксперт по ИИ и автоматизации процессов

Больше статей