~/utility/rag-web-crawler

RAG Web Crawler — веб-страницы в Markdown и текстовые фрагменты

Обходит публичные веб-страницы и выдаёт чистый Markdown, простой текст и перекрывающиеся фрагменты с исходным URL и позициями символов, готовые для RAG.

данные для RAG TypeScriptMozilla ReadabilityjsdomTurndown Глобально
proooxy/rag-web-crawler — характеристики
категорияutility / данные для RAG
языкTypeScript
стекTypeScript, Mozilla Readability, jsdom, Turndown
рынкиГлобально
выводчистый JSON, готовый к RAG

ключевые возможности

Чистый Markdown и простой текст каждой страницы — с заголовками, списками, ссылками, блоками кода и простыми таблицами

Фрагменты, готовые к эмбеддингу: перекрываются и заканчиваются на границах абзацев или предложений, у каждого стабильный id, исходный URL и заголовок и точные позиции символов для цитирования

Сначала основной контент: меню, шапки, подвалы и боковые панели отбрасываются, а CSS-селекторы убирают всё остальное, что вы укажете

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

Поиск вместо URL: каждая страница из результатов запроса обходится как стартовый URL (нужен платный тариф Apify)

robots.txt соблюдается по умолчанию, запросы к одному сайту идут с вежливыми паузами

Страницы остаются на своём языке — английском, китайском и других — без перевода

Статус и код ошибки для каждой страницы и сводка для каждого запуска со счётчиками и причиной остановки

сценарии использования

  • Сборка базы знаний для RAG-чат-бота из документации и страниц справки
  • Опора ИИ-агентов на актуальные веб-страницы, которые они могут цитировать
  • Превращение списка статей в эмбеддинги для семантического поиска
  • Сбор страниц, которые поиск находит по теме, на языке оригинала
  • Регулярное обновление векторного хранилища: id фрагментов не меняются, пока не меняется страница
  • Передача веб-страниц в Markdown ИИ-агентам через MCP-сервер Apify

входные параметры

ПараметрТипОбязательныйОписание
startUrlsarrayопциональноURL публичных страниц для обхода, до 1 000
querystringопциональноПоисковый запрос, страницы результатов которого обходятся (нужен платный тариф Apify)
queriesarrayопциональноДополнительные поисковые запросы, объединяются с query
maxResultsPerQuerynumberопциональноСколько результатов поиска обходить на запрос (по умолчанию 5, не больше 50)
maxPagesnumberопциональноМаксимум разных страниц, которые планирует запуск (по умолчанию 20, не больше 1 000)
maxDepthnumberопциональноНа сколько уровней ссылок углубляться внутри каждого сайта (по умолчанию 0 = только стартовые URL, не больше 5)
maxConcurrencynumberопциональноСтраниц, обрабатываемых одновременно (по умолчанию 3)
maxSearchRequestsnumberопциональноПоисковых запросов за запуск, включая повторы (по умолчанию 10, 0 = без поиска)
maxFetchRequestsnumberопциональноВсе сетевые попытки за запуск, включая robots.txt и повторы (по умолчанию 100)
requestTimeoutSecsnumberопциональноТайм-аут каждого запроса в секундах (по умолчанию 30)
maxResponseBytesnumberопциональноСамый большой принимаемый ответ страницы (по умолчанию 2 МиБ)
maxContentCharsnumberопциональноСамый длинный текст, сохраняемый для страницы, в символах (по умолчанию 50 000)
maxOutputBytesnumberопциональноОбщий объём вывода за запуск (по умолчанию 20 МиБ)
respectRobotsTxtbooleanопциональноСначала проверять robots.txt каждого сайта (по умолчанию включено)
onlyMainContentbooleanопциональноОставлять только основной контент страницы (по умолчанию включено)
removeSelectorsarrayопциональноCSS-селекторы элементов, удаляемых перед извлечением
chunkSizenumberопциональноДлина фрагмента в символах, а не в токенах (по умолчанию 1 000)
chunkOverlapnumberопциональноСколько символов делят соседние фрагменты (по умолчанию 150)

Пример вывода

Одна сохранённая страница из реального запуска: текст сокращён, показан один из пяти её фрагментов.

 1{
 2  "schemaVersion": "1.0",
 3  "url": "https://www.w3.org/WAI/tutorials/tables/one-header/",
 4  "title": "Tables with One Header",
 5  "description": "Accessibility resources free online from the international standards organization: W3C Web Accessibility Initiative (WAI).",
 6  "languageCode": "en",
 7  "canonicalUrl": "https://www.w3.org/WAI/tutorials/tables/one-header/",
 8  "markdown": "# Tables with One Header\n\nin [Tables Tutorial](https://www.w3.org/WAI/tutorials/tables/)\n\n## Overview\n\n…",
 9  "text": "Tables with One Header\n\nin Tables Tutorial\n\nOverview\n\nThis page covers tables that have one simple header for rows or one simple header for columns. …",
10  "chunks": [
11    {
12      "id": "495cb4e58e13bbf9b5cdbe922f7ea652973ca4dfda61b952aaa021db045a450c",
13      "index": 0,
14      "text": "Tables with One Header\n\nin Tables Tutorial\n\nOverview\n\nThis page covers tables that have one simple header for rows or one simple header for columns. …",
15      "startChar": 0,
16      "endChar": 988,
17      "sourceUrl": "https://www.w3.org/WAI/tutorials/tables/one-header/",
18      "title": "Tables with One Header"
19    }
20  ],
21  "contentTruncated": false,
22  "sources": [],
23  "crawl": {
24    "depth": 0,
25    "httpStatusCode": 200,
26    "loadedAt": "2026-10-19T07:03:53.643Z",
27    "contentType": "text/html",
28    "renderingMode": "http",
29    "extractionMethod": "main"
30  }
31}

Позиции фрагментов считаются в кодовых точках Unicode внутри text. Каждый запуск также пишет REQUESTS — результат по каждой странице со статусом и кодом ошибки — и OUTPUT — сводку запуска со счётчиками, причиной остановки и списанными событиями.

Советы

  • Используйте id как ID записи в векторном хранилище. Он не меняется между запусками, пока не меняются страница и настройки нарезки, поэтому при записи фрагментов по id в плановом запуске они заменяются, а не дублируются.
  • Начните с нескольких страниц. Проверьте Markdown своих страниц, прежде чем увеличивать maxPages или maxDepth, а остатки вроде блоков похожих ссылок уберите через removeSelectors.
  • Смотрите REQUESTS вместе с Dataset. Запуск может завершиться успешно, даже если часть страниц пропущена или завершилась ошибкой, и для каждой указана причина.

частые вопросы

Чем он отличается от обычного веб-парсера?
Вы задаёте URL или поисковый запрос, а не селекторы. Он сохраняет основной контент каждой страницы в Markdown и простом тексте и режет текст на фрагменты, готовые к эмбеддингу, — у каждого URL, заголовок и точные позиции символов страницы, так что ответ может сослаться на источник.
Нужен ли API-ключ?
Никаких внешних API-ключей ни для обхода, ни для поиска. Нужен аккаунт Apify; при вызове актора через API Apify используется ваш токен Apify.
Он выполняет JavaScript?
Нет. Он читает страницы по HTTP, поэтому страница, которой нужен JavaScript, чтобы показать текст, может завершиться ошибкой NO_CONTENT или прийти неполной. Сначала попробуйте несколько своих страниц.
Какие страницы он может прочитать?
Публичные страницы в HTML, Markdown и простом тексте. Вход в аккаунт, cookies, платный доступ, CAPTCHA, прокси, PDF и изображения не поддерживаются, а адреса частных сетей и URL с учётными данными отклоняются.
Разрешено ли обходить сайты?
Сбор общедоступных неперсональных данных обычно законен, но содержимое страниц часто защищено авторским правом, а некоторые сайты ограничивают обход в своих условиях. Краулер по умолчанию соблюдает robots.txt; за использование собранного отвечаете вы.

похожие в ~/utility

Запустите RAG Web Crawler — веб-страницы в Markdown и текстовые фрагменты или закажите разработку под задачу

Начните извлекать данные на Apify за считаные минуты или закажите у меня разработку парсера на заказ и RAG-конвейера под ваш источник и схему.

запустить на Apify заказать данные