Как извлекать и парсить карты сайта для полного обхода сайта
TL;DR
Карта сайта — это средство для обнаружения, а не доказательство того, что каждая перечисленная страница доступна или стоит обхода.
Индекс карты сайта указывает на другие карты сайта; набор URL включает кандидаты на страницы.
Включение карты сайта не устанавливает права доступа, актуальность или полное покрытие сайта.
Сравните отфильтрованный манифест карты сайта с ограниченным рекурсивным результатом обхода, чтобы найти пробелы.
Nstdata Crawl обрабатывает рендеринг JavaScript и маршрутизацию через прокси в рамках управляемых запросов; его документация перечисляет шесть категорий вывода: Markdown, HTML, необработанные данные, PDF, скриншоты и ссылки.
Что такое карта сайта и почему ее нужно анализировать?
Карта сайта — это XML-документ, в котором перечислены URL страниц, или индекс, который перечисляет другие документы карты сайта. Ее анализ дает вам кандидатов для плана обхода. Это не доказывает, что каждый URL актуален, каноничен, внутренне связан или подходит для вашего использования. Полное покрытие сайта также может потребовать обнаружения ссылок, поскольку некоторые страницы отсутствуют в карте сайта. Объедините оба входа под хостом, путем, глубиной и пределами страниц.
Nstdata Crawl может превратить URL или ограниченный набор связанных страниц в материал для AI-агента, индекса RAG или конвейера данных. Используйте свои собственные правила поля и проверки принятия для конкретного результата: обнаружьте авторизованные URL из карт сайта и превратите проверенный поднабор в ограниченный обход сайта. Полное руководство по обходу сайта Nstdata объясняет вариант на уровне сайта.
Начните с сайта, который вы владеете или который можете обойти. Проверьте файл /robots.txt на предмет деклараций карты сайта и правил доступа, затем проверьте индекс карты сайта или набор URL. Запишите разрешенный хост, префиксы путей, типы файлов, язык и максимальное количество страниц. Исключите учетные записи, корзины, поисковые, календарные и дублирующие запросы, если это не нужно. Храните манифест кандидатов, принятых, отклоненных и реально обошедших URLs.
Документация API обхода использует https://api.nstdata.io, заголовок x-api-key и Content-Type: application/json. Подготовьте эти поля перед запуском метода:
Поле
Что предоставить
url
Один разрешенный HTTPS URL страницы или сайта
formats
Запрашиваемые выходные форматы, такие как ["markdown"] или ["html","screenshot"]
onlyMainContent
true только тогда, когда выбор основного тела соответствует задаче
maxDepth, maxPages
Явные ограничения для задачи на уровне сайта
includeUrls, excludeUrls
Шаблоны URL, которые сохраняют обнаружение в пределах области действия
timeout
Тайм-аут задачи в миллисекундах, если по умолчанию он неподходящ
Стандартный управляемый запрос не имеет отдельных полей Host, Port, Username, Password или Protocol для прокси. Проверьте текущую страницу цен на обход на предмет лимитов аккаунтов и сборов перед запуском крупной задачи.
Просмотрите политику доступа и область данного объекта. Протокол исключения роботов определяет, как роботы читают правила роботов; он не предоставляет права на использование контента. Держите учетные данные и частные данные вне примеров и диагностических журналов.
urlset содержит записи <loc> страниц. sitemapindex содержит дочерние записи <loc> карты сайта, которые могут быть XML или сжатые файлы. Nstdata Crawl может обнаруживать URL из структур сайта и следовать внутренним ссылкам рекурсивно в рамках настроенных правил maxDepth, maxPages, включения и исключения. Рендеринг JavaScript помогает на динамических страницах, а маршрутизация через прокси встроена в управляемый сервис. API не устраняет необходимость проверять кандидаты на URL и права на обход.
Для известного URL одноразовый обход страницы получает один результат. Для раздела сайта POST /api/v1/crawl рекурсивно обнаруживает связанные страницы в рамках указанной глубины, количества страниц и URL-правил. Документация перечисляет Markdown, HTML, необработанные данные, PDF, скриншоты и ссылки как шесть категорий вывода; страница продукта также предлагает JSON, но специфическая для домена схема JSON все еще требует явного сопоставления поля. Сохраняйте каждую принятую запись, привязанную к своему оригинальному URL и возвращенным метаданным.
Проверьте страницу, насыщенную JavaScript, перед масштабированием. Состояние рендеринга может зависеть от времени, региона, согласия или сессии с входом. Сравните возвращаемый HTML или снимок экрана с ожидаемым состоянием страницы; если они отличаются, измените только задокументированные параметры рендеринга и ожидания.
Как разобрать карту сайта и обойти сайт?
Сначала разбирайте и фильтруйте кандидаты для карты сайта, используйте ограниченное открытие Crawl, чтобы находить связанные страницы, и поддерживайте манифест для повторяемых проверок покрытия. Карта сайта и рекурсивный обход отвечают на связанные, но различные вопросы о поиске.
Метод 1: Проверьте карту сайта перед обходом
Лучше всего подходит для небольшого сайта или одноразового обзора открытия.
Шаг 1: Найдите декларации карты сайта
Откройте /robots.txt сайта и ищите строки Sitemap:. Если ничего не объявлено, проверьте только задокументированное местоположение карты сайта; не предполагайте, что каждый сайт использует /sitemap.xml.
Шаг 2: Классифицируйте XML
Определите, является ли корнем sitemapindex или urlset. Следуйте URL-адресам дочерних карт сайта только в пределах одобренного хоста и избегайте неограниченного рекурсивного получения. [Снимок экрана: корень XML и записи <loc>.]
Используйте ограниченный парсер, а не копируйте значения <loc> вручную. Этот пример стандартной библиотеки принимает URL карты сайта, следует максимум трём уровням индексированных карт сайта, остается на оригинальном хосте и выводит URL страниц:
from urllib.request import urlopen
from urllib.parse import urlparse
from xml.etree import ElementTree as ET
import gzip, sys
start = sys.argv[1]host = urlparse(start).hostname
seen =set()defvisit(url, depth=0):if depth >3or url in seen or urlparse(url).hostname != host:return seen.add(url)with urlopen(url, timeout=20)as response: raw = response.read(10_000_001)iflen(raw)>10_000_000:raise ValueError("Размер карты сайта превышает предел проверки")if url.endswith(".gz"): raw = gzip.decompress(raw) root = ET.fromstring(raw) ns ={"s":"http://www.sitemaps.org/schemas/sitemap/0.9"}if root.tag.endswith("sitemapindex"):for loc in root.findall("s:sitemap/s:loc", ns): visit(loc.text.strip(), depth +1)elif root.tag.endswith("urlset"):for loc in root.findall("s:url/s:loc", ns):if urlparse(loc.text.strip()).hostname == host:print(loc.text.strip())else:raise ValueError("Неожиданный корень карты сайта")visit(start)
Сохраните его как parse_sitemap.py и запустите python3 parse_sitemap.py https://example.com/sitemap.xml > urls.txt. Просмотрите и удалите дубликаты из urls.txt перед обходом; скрипт не дает разрешения на сбор указанных страниц.
Шаг 3: Просмотрите кандидатов
Нормализуйте и удалите дубликаты URL, затем отфильтруйте по одобренному хосту, пути, языку и типу контента. Указанный URL является кандидатом, а не принятой страницей.
Метод 2: Используйте Nstdata Crawl для ограниченного открытия
Лучше всего, когда открытие ссылок должно дополнять карту сайта.
Шаг 1: Сохраните API-ключ
Держите NSTDATA_API_TOKEN на стороне сервера и отправляйте его как x-api-key.
Шаг 2: Отправьте ограниченную задачу
Используйте POST /api/v1/crawl с URL-адресом начала, maxDepth, maxPages, правилами включения/исключения URL и необходимыми форматами. Пример ниже следует официальному формату запроса для обхода сайта.
Установите NSTDATA_API_TOKEN в своей оболочке из вашей учетной записи Nstdata, затем выполните задокументированный запрос быстрого старта. Официальная документация не последовательно маркирует некоторые другие маршруты синхронизации и асинхронные; сравните запрос, сгенерированный в Playground вашей учетной записи, перед производственным использованием.
curl--output crawl-response.json --request POST "https://api.nstdata.io/api/v1/crawl"\--header"x-api-key: ${NSTDATA_API_TOKEN}"\--header"Content-Type: application/json"\--data'{"url":"https://example.com/docs/","formats":["markdown"],"maxDepth":2,"maxPages":10,"includeUrls":["*example.com/docs/*"],"excludeUrls":["*example.com/admin/*"],"ignoreQuery":true}'
Ответ сохраняется в crawl-response.json. Проверьте вложенные поля data.success, data.status и data.data.metadata.statusCode перед использованием любого возвращенного контента.
Шаг 3: Сравните покрытие
Опрашивайте идентификатор обхода, извлекайте страницы и сравнивайте возвращенные URL с вашим манифестом карты сайта. Исследуйте отсутствующие высокоценные страницы и неожиданные пути, а не предполагайте, что поиск завершен.
Метод 3: Поддерживайте повторяемый манифест URL
Лучше всего подходит для периодической документации или обновлений каталога.
Шаг 1: Сделайте снимок кандидатов
Сохраните нормализованный URL, исходную карту сайта и время открытия для каждого одобренного кандидата.
Шаг 2: Отслеживайте результаты обхода
Записывайте статус получения, хеш контента и причину отклонения для каждого URL. Держите изменения карты сайта отдельно от изменений контента.
Шаг 3: Обновляйте выборочно
Возвращайтесь к измененным или высокоценным страницам в ритме, разрешенном целевой аудитории. Избегайте повторного обхода неизмененных больших разделов только потому, что метка времени карты сайта изменилась.
Как выверить вывод?
Манифест звукового ползания различает перечисленные URL, обнаруженные URL, загруженные URL и принятый контент. Эти наборы могут отличаться. Протокол Sitemaps определяет элементы sitemapindex, urlset и <loc>, в то время как Google Search Central отмечает, что карта сайта помогает при обнаружении, но не гарантирует ползание. Руководство Nstdata по поиску страниц веб-сайтов охватывает дополнительные методы обнаружения.
Запишите исходный URL, время отправки, запрашиваемые форматы, не секретные опции, идентификатор задачи (если он есть), статус возвращаемой страницы и причину, по которой каждая запись прошла или не прошла проверку. Проверьте содержимое, а также API-оболочку. Если ответ содержит markdownRef, htmlRef, rawDataRef, screenshotRef или pdfRef, получите этот токен с помощью GET /api/v1/crawl/storage/read?st={ref}.
Для этого рабочего процесса консультируйтесь с протоколом Sitemaps при реализации последующего парсера или проверки приемлемости, зависящей от формата.
Передавая извлеченный текст агенту, рассматривайте инструкции страниц как ненадежный исходный материал. Руководство OWASP по инъекциям запросов объясняет риск. Сохраняйте исходные URL, чтобы результат ИИ можно было проверить.
Почему обнаружение карты сайта может пропустить страницы?
Ползание на основе карты сайта может не сработать, если корневой файл является индексом карты сайта. Используйте таблицу симптомов для определения неудачного уровня перед тем, как изменять лимиты или пытаться снова.
Симптом
Вероятная причина
Следующее действие
Парсится только первая карта сайта
Корневой файл является индексом карты сайта.
Следуйте за дочерними записями <loc> с ограничением по глубине и хосту.
Многие перечисленные URL не проходят
Карта сайта устарела или доступ ограничен.
Проверьте окончательный статус и целевые правила; отклоните недоступные кандидаты.
Ползание пропускает ожидаемые страницы
Глубина, лимит, правила URL или отсутствующие ссылки ограничивают обнаружение.
Сравните манифест с возвращенными URL и скорректируйте одну границу.
Документация Nstdata перечисляет ошибки на уровне задачи, такие как access_denied, timeout, parse_error и internal_error. Внешний HTTP 200 может все еще сопровождать неудавшуюся задачу. Проверьте success, status, errorCode и errorMessage внутри ответа, если они есть. Повторите попытку только при временных сбоях на сайтах, к которым у вас есть доступ.
Какой метод лучше всего подходит?
Парсите карту сайта для кандидатного манифеста, используйте Nstdata Crawl для обнаружения связанных страниц в пределах заданных ограничений и поддерживайте манифест, когда покрытие необходимо обновить. Сравнивайте обнаруженные и принятые URL после каждой проверки. Обзор ползания по сайту Nstdata предоставляет более подробную информацию о маршруте сайта.
Что делать после первого успешного запуска?
Сохраните утвержденную конфигурацию и одну запись результата с поддержкой источника, затем повторите с небольшим набором различных шаблонов страниц. Увеличивайте объем только после того, как эти записи пройдут одинаковые проверки приемлемости.
Нет. Сайты могут опускать страницы, сохранять устаревшие URL или перечислять URL вне необходимого вам раздела. Сравните с обнаружением внутренних ссылок.
В: Может ли Nstdata Crawl использовать карту сайта и следовать за ссылками?
Страница продукта описывает обнаружение карт сайта и ссылок; ограничьте задачу по глубине, количеству страниц и правилам URL.
В: Является ли URL в карте сайта разрешением для его обхода?
Нет. Просмотрите правила цели и ваши полномочия на использование контента перед сбором.
В: Требуется ли отдельная конфигурация прокси для ползания на основе карты сайта с Nstdata Crawl?
Стандартный управляемый запрос Crawl не требует отдельного указания полей Proxy Host, Port, Username, Password или Protocol. Подтвердите любой опциональный выбор кастомного прокси и связанные с этим расходы в вашем аккаунте.
В: Подтверждает ли HTTP 200, что результат краулинга на основе карты сайта можно использовать?
Нет. Проверьте результат вложенной задачи, статус страницы, ожидаемые поля и согласованность тела перед использованием в AI или рабочем процессе данных.
Этот учебник показывает, как обнаружить авторизованные URL-адреса из карт сайтов и превратить проверенный подмножество в ограниченное сканирование сайта. Он охватывает практические методы, проверки результатов и ограничения управляемого сканирования.
Kai Watanabe
Oct. 28th 2026
Сканируйте целые сайты одним API-запросом
Успешность 99,8% с рендерингом JavaScript
Получайте чистые данные для LLM в разных форматах
Преобразуйте любой сайт в Markdown, HTML, JSON, ссылки, PDF и другие форматы без управления инфраструктурой сканирования.