00:00:00Когда вам нужен скрепер для RAG, проблема не в получении данных,
00:00:03а в их очистке.
00:00:04JavaScript все ломает, HTML забит мусором,
00:00:07и мы просто тратим время, пытаясь сделать их пригодными для LLM.
00:00:11Решение этой проблемы — CrawlForAI.
00:00:13Он создан для ИИ, поддерживает асинхронность,
00:00:15обрабатывает JavaScript и выдает чистый Markdown или JSON,
00:00:18а работает до шести раз быстрее традиционных Python-скреперов, таких как Scrapy.
00:00:23Мы получаем готовые для модели данные быстрее, чем когда-либо.
00:00:26Как это работает? В чем отличие?
00:00:29Вот главные вопросы.
00:00:30[МУЗЫКА]
00:00:35Так что же такое CrawlForAI на самом деле?
00:00:37На первый взгляд кажется, что это просто очередной краулер на Python,
00:00:40но он создан не для обычного скрепинга, а специально для ИИ.
00:00:43И вот в чем разница.
00:00:44Большинство краулеров выдают сырой HTML,
00:00:46CrawlForAI же дает чистый Markdown или структурированный JSON, готовый для LLM.
00:00:52Он обрабатывает JavaScript с помощью Playwright,
00:00:54работает асинхронно, поэтому отлично масштабируется,
00:00:57и имеет режим предзагрузки, который пропускает тяжелый рендеринг, если нужны только ссылки.
00:01:01Это важно, потому что при создании чат-ботов,
00:01:04ассистентов или агентов проблема не в самом обходе сайтов,
00:01:08а в превращении хаотичных веб-данных в полезную информацию.
00:01:11CrawlForAI решает эту проблему полностью и быстро.
00:01:15Если вам нравится такой контент, обязательно подпишитесь.
00:01:18У нас постоянно выходят новые видео.
00:01:20Начнем с простого. Вот самый базовый пример, который я запустил.
00:01:23Многое я взял из их репозитория и документации,
00:01:25лишь подправив пару строк для запуска.
00:01:28Я импортировал AsyncWebCrawler, который обрабатывает асинхронные запросы для ИИ-пайплайнов.
00:01:34Затем я просто вызываю run для URL с техническими новостями, и все.
00:01:38А теперь посмотрите на результат.
00:01:40Мы получаем назад не сырой HTML,
00:01:43а чистый Markdown и аккуратный JSON.
00:01:45Заголовки структурированы, ссылки сохранены,
00:01:47а «под капотом» он загружает страницу,
00:01:50анализирует DOM, убирает шум,
00:01:52и ранжирует контент, чтобы оставить важное без лишней шелухи.
00:01:57Если нам нужно собрать суммаризатор новостей или прототип RAG,
00:02:02нам не нужно писать скрипты для очистки —
00:02:04мы просто передаем эти данные напрямую в модель.
00:02:07Я ожидал обычного скрепинга, как и от любого другого инструмента,
00:02:11но на деле получил уже полностью подготовленные данные.
00:02:14Этот разрыв — и есть сэкономленное время.
00:02:17Дальше становится еще интереснее.
00:02:19Пока я с ним возился, я заметил,
00:02:20что рендерить каждую страницу вовсе не обязательно.
00:02:23Смотрите сами.
00:02:25Это тот же краулер,
00:02:27но теперь мы ставим параметр prefetch в значение true.
00:02:30Я запущу его на Hacker News.
00:02:31Видите, как быстро это работает?
00:02:33Скорость была просто безумной.
00:02:35Вместо рендеринга каждой страницы
00:02:37он сначала собирает ссылки,
00:02:38используя простую асинхронную загрузку.
00:02:39Если вы строите агрегатор, это идеальный вариант.
00:02:42Сначала находим то, что нужно,
00:02:44а извлекаем данные уже позже.
00:02:45Вы не сканируете всё подряд,
00:02:47а только необходимые части.
00:02:48Эта разница в эффективности становится колоссальной,
00:02:50когда речь идет о сотнях или тысячах URL-адресов.
00:02:52Теперь поговорим о работе в реальных проектах.
00:02:55Я запущу глубокий обход, используя стратегию BFS deep crawl.
00:02:58Это их реализация поиска в ширину.
00:03:01Затем я определяю состояние для возобновления (resume state)
00:03:03и добавляю функцию обратного вызова при изменении состояния.
00:03:07Я запускаю процесс,
00:03:08а затем принудительно его завершаю.
00:03:10Большинство инструментов при таком сбое
00:03:13начинают всё сначала.
00:03:14Но посмотрите, что происходит при повторном запуске:
00:03:16он подхватывает сохраненное JSON-состояние
00:03:19и продолжает ровно с того места, где остановился, ничего не теряя.
00:03:22Так что при создании огромной базы знаний для RAG
00:03:24вылет программы — это не катастрофа.
00:03:26Обычно это обходится дорого,
00:03:29но здесь работа просто продолжается.
00:03:30А вот то, чего не умеет большинство скреперов — семантическое извлечение.
00:03:35Если я определю схему с помощью Pydantic,
00:03:37например: должность, компания, зарплата,
00:03:39и попробую собрать данные с Indeed.
00:03:40Затем я настраиваю их стратегию извлечения через LLM,
00:03:44указывая инструкции и провайдера.
00:03:46Запускаю это на сайте вакансий Indeed,
00:03:48и посмотрите на результат.
00:03:49Это действительно впечатляет.
00:03:51Структурированный JSON с чистыми полями,
00:03:52и вот что происходит за кулисами.
00:03:54CrawlForAI конвертирует страницу,
00:03:56как я уже говорил, в Markdown или JSON на ваш выбор.
00:03:58Затем отправляет это в модель.
00:04:01Модель структурирует данные по вашей схеме.
00:04:03Это не просто парсинг текста —
00:04:06это извлечение именно того, что нам нужно.
00:04:07Теперь LLM может легко с этим работать.
00:04:09Это совершенно новый уровень возможностей для инструментов в стиле LLM.
00:04:11Это было круто,
00:04:15но давайте взглянем на картину в целом.
00:04:16Плюсы: это быстро.
00:04:18Очень быстро — до шести раз быстрее в тестах.
00:04:20Автоматически обрабатывает JavaScript.
00:04:22Асинхронный, масштабируемый
00:04:24и возобновляет работу после сбоев.
00:04:26Но главное преимущество —
00:04:28прямая интеграция с LLM.
00:04:29К тому же, это открытый исходный код.
00:04:32Я просто установил его через pip, и всё заработало.
00:04:33Конечно, как и везде,
00:04:35здесь есть свои компромиссы.
00:04:36Он работает только на Python.
00:04:38Если вы не используете Python,
00:04:39это может стать препятствием.
00:04:41Для функций LLM нужны API-ключи, если только вы не запускаете локальные модели типа Ollama.
00:04:42При сканировании всё равно можно наткнуться на лимиты запросов (rate limits),
00:04:46и как в любом быстроразвивающемся open-source проекте,
00:04:49нужно следить за обновлениями.
00:04:51Обновления выходят постоянно.
00:04:53Но для разработчиков в сфере ИИ
00:04:54он снимает массу головной боли,
00:04:56особенно в пайплайнах RAG.
00:04:58Давайте сравним его с тем, что вы, возможно, уже используете.
00:05:00Scrapy — классика для Python.
00:05:03Он хорош для масштабного скрепинга статики,
00:05:05но он основан на правилах и требует много шаблонного кода.
00:05:07Честно говоря, его настройка занимает много времени.
00:05:10Если вам нужно извлечение через LLM из Markdown-вывода,
00:05:13вам придется достраивать кастомные слои.
00:05:16В CrawlForAI это уже встроено.
00:05:17Есть Beautiful Soup.
00:05:19Он очень легкий, но слишком простой —
00:05:21по сути, это просто парсер.
00:05:23В нем нет движка для обхода сайтов
00:05:25и нет рендеринга JavaScript.
00:05:26В итоге вам придется склеивать кучу инструментов вручную.
00:05:28И, конечно, Selenium.
00:05:31Он рендерит JavaScript, да,
00:05:33но он медленнее и требует больше ручной работы.
00:05:36Масштабирование асинхронных рабочих процессов там — та еще мука.
00:05:38CrawlForAI оборачивает Playwright внутри себя
00:05:42и предоставляет понятный асинхронный API.
00:05:44Если вы создаете традиционные скреперы на правилах
00:05:46для статических данных,
00:05:48ваших текущих инструментов будет вполне достаточно.
00:05:49Но если вы строите ИИ-системы,
00:05:52RAG-пайплайны или автономных агентов,
00:05:54CrawlForAI специально создан для такого мира,
00:05:56и это действительно крутой инструмент.
00:06:00Он не просто сканирует страницы, он подготавливает данные именно так,
00:06:02как нужно для LLM.
00:06:04Это и есть CrawlForAI.
00:06:06Если вы занимаетесь ИИ, на него точно стоит взглянуть.
00:06:08Он работает очень быстро, я был по-настоящему впечатлен.
00:06:11И это здорово,
00:06:14что при создании RAG-систем
00:06:15мы можем подавать чистые данные напрямую в LLM.
00:06:17Увидимся в следующих видео.
00:06:20[МУЗЫКА]