Скачивание превращает найденные ссылки в материал для анализа: страницы сохраняются, конвертируются в чистый Markdown и раскладываются по датам. Для упрямых сайтов — пять методов скачивания с эскалацией от прямого запроса до полноценного браузера.
Пять методов
- Direct HTTP — обычный запрос страницы: самый дешёвый и быстрый способ, работает для большинства сайтов, но пасует там, где содержимое рисуется скриптами или стоит защита от ботов;
- Proxied HTTP — то же самое, но запрос идёт через прокси: помогает, когда сайт ограничивает доступ по стране или по частоте запросов;
- Browser Emulation — локальный браузер (Playwright) на вашем сервере: прогружает страницы с JavaScript. Браузер скачивается автоматически при первом использовании; из локальных методов самый затратный по ресурсам;
- Nodriver — локальный недетектируемый браузер: преемник undetected-chromedriver, лучший локальный вариант для страниц с защитой от ботов. Python-пакет и Chromium скачиваются автоматически при первом использовании — ставить вручную ничего не нужно;
- Remote Browser — удалённый браузер: внешний сервис управления браузером (протокол Playwright MCP или Zendriver). Лучше всего подходит для сайтов с защитой от ботов и обилием JavaScript.
Методы подключаются как сервисы в разделе Services. Если страницу не удалось скачать одним методом, система сама пробует следующий по приоритету — обычная цепочка идёт от простого к упорному: Direct HTTP → Proxied HTTP → Browser Emulation → Nodriver → Remote Browser. Обход блокировок и защит от ботов происходит без участия пользователя.
Конвертация в Markdown
Каждая скачанная страница конвертируется в чистый Markdown с помощью Trafilatura: остаётся содержимое, уходит навигация, реклама и разметка. Дальнейшая работа — чанкинг, извлечение, чтение — идёт уже по тексту, а не по HTML.
Хранение
Файлы раскладываются по датам: {RESEARCH_AGENT_FETCH_FOLDER}/yyyy-MM-dd/{domain}_{slug}_{hash8}.md — по умолчанию /data/fetch внутри постоянного volume. В базе хранится абсолютный путь и размер каждого файла, интерфейс отдаёт содержимое через защищённый адрес отдачи файла — Markdown можно читать прямо в приложении.
Скачанные страницы — временная история, а не архив: фоновый уборщик удаляет их через двое суток после скачивания (окно настраивается переменной RESEARCH_AGENT_FETCH_RETENTION_HOURS). Дольше живут только готовые отчёты в библиотеке — они и есть то, ради чего всё делается, поэтому сохранить стоит именно их.
Сессии скачивания
Раздел Fetch показывает сессии скачивания: статусы, историю и результаты, повторные запуски. Долгий пакет можно остановить — кнопка остановки есть у сессии и у каждой её строки; продукт сначала спросит подтверждение, а уже скачанные страницы останутся. У отчёта в библиотеке видны сессии поиска и скачанные исходники — проследить, откуда взят каждый факт, можно в один клик.
Доступ внешних агентов
Скачивание доступно снаружи через POST /api/agent/fetch с заголовком X-API-Key — внешние агенты получают тот же конвейер с запасными методами и конвертацией в Markdown.