Проблема

LLM любят markdown. HTML — нет. Когда вы пытаетесь скормить модели реальную веб-страницу, получается:

  • 80% токенов уходит на навигацию, рекламу, футеры
  • Структура документа теряется в div-ах и span-ах
  • JavaScript-рендеринг требует headless-браузера
  • Антибот-защиты блокируют простые curl-запросы

Решение

Firecrawl — это API и self-hosted сервис, который:

  1. Обходит сайт целиком (crawling)
  2. Рендерит JavaScript через headless Chrome
  3. Превращает каждую страницу в чистый markdown (или structured JSON)
  4. Извлекает основной контент, игнорируя шум
  5. Работает с любой CMS — Confluence, Notion, GitBook, обычные сайты

Установка

Self-hosted через Docker:

git clone https://github.com/mendableai/firecrawl
cd firecrawl
docker compose up -d

После старта API доступен на http://localhost:3002.

Использование

Scrape одной страницы

import FirecrawlApp from "@mendable/firecrawl-js";

const app = new FirecrawlApp({ apiKey: "fc-..." });

const result = await app.scrapeUrl("https://example.com/article", {
  formats: ["markdown"],
  onlyMainContent: true,
});

console.log(result.markdown);

Crawl всего сайта

const crawlResult = await app.crawlUrl("https://docs.example.com", {
  limit: 100,
  includes: ["docs/*"],
  excludes: ["docs/api/internal/*"],
  scrapeOptions: { formats: ["markdown"] },
});

Extract структурированных данных

const result = await app.extract({
  urls: ["https://shop.example.com/products/123"],
  schema: {
    type: "object",
    properties: {
      name: { type: "string" },
      price: { type: "number" },
      inStock: { type: "boolean" },
    },
  },
});

Архитектура

Firecrawl/
├── apps/api/        # Fastify API сервер
├── apps/worker/     # BullMQ воркеры для скрапинга
├── apps/playwright-service/  # Headless Chrome
├── apps/rust-sdk/   # Rust SDK для встраивания
└── packages/        # Общие пакеты

Под капотом:

  • Playwright для рендеринга JS
  • BullMQ + Redis для очередей задач
  • PostgreSQL для хранения результатов
  • Puppeteer stealth для обхода антиботов
  • LLM-экстракция через OpenAI или локальные модели

Главные сценарии

1. RAG для документации

// Скрейпим всю документацию проекта
await app.crawlUrl("https://docs.myproject.com", { limit: 500 });

// Дальше чанкинг + эмбеддинги + ChromaDB
// → готовый RAG-ассистент

2. Парсинг вакансий, цен, новостей

Структурированные схемы (JSON Schema) превращают хаотичный HTML в чистые данные.

3. Мониторинг изменений на сайте

Crawl по расписанию + diff между версиями = уведомления о важных изменениях.

4. Построение датасетов

Если вы готовите датасет для fine-tuning, вам нужно много качественного текстового контента. Firecrawl даёт его одной командой.

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

Инструмент JS-рендеринг Markdown Структурный extract Self-hosted
BeautifulSoup
Scrapy + Splash
Puppeteer
Reader API
Firecrawl

Ограничения

  • Self-hosted версия требует хорошего железа (Playwright прожорлив)
  • Headless-браузеры иногда блокируются сайтами с серьёзной антибот-защитой
  • Для очень больших сайтов (>100k страниц) нужна серьёзная инфраструктура

Итог

Лучший open-source инструмент для превращения веба в данные, пригодные для LLM. Поставил — и через 10 минут у тебя есть API, который по URL возвращает чистый markdown. Используется в продакшене у Cursor, Replit и десятков других AI-стартапов.

#scraping#llm#rag
Опубликовано 8 января 2026 г.