← Назад к блогу

Парсинг через sitemap.xml: как собрать каталог Wildberries в 10 раз дешевле обхода сайта

Вместо того чтобы сканировать сайт страница за страницей, используйте готовую карту sitemap.xml — это сократит расходы на прокси и время парсинга в разы.

📅22 октября 2026 г.

Большинство новичков в парсинге начинают с полного обхода сайта: заходят на главную, собирают все ссылки, переходят по каждой, снова собирают ссылки — и так тысячи раз. Это съедает прокси, время и часто заканчивается баном. Есть способ проще и дешевле: почти у каждого крупного сайта, включая Wildberries, Ozon и Авито, уже есть готовая карта всех страниц — sitemap.xml. Разберёмся, как её найти, прочитать и использовать вместо тысяч лишних запросов.

Что такое sitemap.xml и зачем он парсерам

Sitemap.xml — это файл, который сайт создаёт сам для поисковых систем вроде Google и Яндекс. В нём перечислены все страницы, которые владелец сайта хочет, чтобы проиндексировали: карточки товаров, категории, статьи блога. По сути, это готовый список URL, который сайт сам вам отдаёт — не нужно переходить по ссылкам вручную, кликать по пагинации или разгадывать логику навигации.

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

Важный нюанс: не все страницы попадают в sitemap. Иногда туда не включают страницы с фильтрами, временные акции или страницы с параметрами в URL. Поэтому sitemap — это не всегда 100% покрытие сайта, но обычно 80-95% полезных страниц, которые вам нужны для каталога или мониторинга.

Полный обход vs sitemap-first: сравнение затрат

Разница в подходах ощутима, если считать не в абстрактных "попытках", а в реальных ресурсах: количестве запросов, расходе прокси-трафика и времени до результата. Ниже сравнение на примере сбора каталога из 50 000 карточек товаров.

Параметр Полный обход сайта Парсинг через sitemap
Запросов на сбор URL 15 000–20 000 (категории, пагинация, фильтры) 50–300 (только файлы sitemap)
Время на сбор списка URL 4–8 часов 15–30 минут
Риск блокировки IP Высокий из-за объёма запросов к навигации Низкий, запросов в разы меньше
Нагрузка на прокси-трафик Высокая, нужен большой пул IP Минимальная, можно обойтись малым пулом
Сложность логики парсера Высокая, нужно разбирать навигацию Низкая, разбор XML-структуры

Цифра "в 10 раз дешевле" из заголовка — не преувеличение. Если полный обход требует 15-20 тысяч запросов только для составления списка страниц, а sitemap даёт тот же список за 50-300 запросов, экономия на трафике прокси и времени получается кратной. При этом сами карточки товаров вам всё равно придётся скачивать отдельно — но вы точно знаете, какие URL скачивать, и не тратите ресурсы на страницы-пустышки, дубли и мусорные ссылки.

Как найти sitemap.xml на любом сайте

Первый и самый простой способ — добавить /sitemap.xml к домену сайта. Например, для проверки попробуйте открыть в браузере адрес вида https://example.com/sitemap.xml. Это сработает для большинства сайтов, включая многие интернет-магазины на популярных CMS.

Если по этому адресу ничего нет, проверьте файл robots.txt — он почти всегда лежит по адресу /robots.txt и в большинстве случаев содержит строку Sitemap: https://example.com/sitemap_index.xml. Это официальный способ, которым сайты сообщают поисковикам, где искать карту. У крупных маркетплейсов вроде Wildberries и Ozon карты сайта часто разбиты на десятки файлов и указаны именно через robots.txt.

Третий вариант — поискать упоминания в системах вроде Google Search Console (если у вас есть доступ к своему сайту) или использовать специализированные сканеры сайта, которые сами находят все файлы sitemap. Для чужих сайтов конкурентов обычно достаточно первых двух способов — robots.txt практически никогда не закрывают от посторонних глаз, это публичный файл.

Совет:

Имена файлов sitemap не всегда стандартные. Встречаются варианты sitemap_index.xml, sitemap-products.xml, product-sitemap.xml и подобные. Всегда начинайте с robots.txt — он укажет точные пути.

Структура sitemap у маркетплейсов: индекс и вложенные карты

У небольших сайтов обычно один файл sitemap.xml со всеми URL. Но у крупных каталогов, таких как Wildberries, Ozon или Avito, миллионы страниц, и один XML-файл с таким объёмом был бы неудобен. Поэтому они используют так называемый sitemap index — файл-оглавление, который ссылается на десятки или сотни отдельных sitemap-файлов, разбитых по категориям, датам или просто пачками по 10-50 тысяч URL.

Структура выглядит примерно так: сначала вы открываете главный индексный файл, в нём находите список ссылок на дочерние sitemap, например sitemap-products-1.xml, sitemap-products-2.xml и так далее. Затем нужно скачать каждый из этих файлов и уже из них извлечь конечные URL карточек товаров. Это двухуровневый процесс, но он всё равно на порядок быстрее, чем обход навигации сайта вручную.

Иногда дочерние sitemap-файлы сжаты в формате gzip (расширение .xml.gz) — это стандартная практика для экономии места на сервере. Если скрипт скачивает файл и видит нечитаемые символы вместо XML, скорее всего, нужно сначала разархивировать содержимое перед парсингом.

Пошаговое извлечение URL из sitemap

Для тех, кто работает с готовыми no-code инструментами парсинга, большинство современных парсеров каталогов маркетплейсов уже умеют читать sitemap автоматически — достаточно указать корневой URL сайта, и инструмент сам найдёт robots.txt, найдёт индекс sitemap и соберёт список всех карточек. Но если вы работаете с разработчиком или пишете небольшой скрипт самостоятельно, логика работы простая, и вот пример на Python:

import requests
import gzip
from io import BytesIO
from lxml import etree

def get_sitemap_urls(sitemap_url, proxies=None):
    response = requests.get(sitemap_url, proxies=proxies, timeout=15)
    content = response.content

    # Распаковка gzip, если файл сжат
    if sitemap_url.endswith('.gz'):
        content = gzip.decompress(content)

    root = etree.fromstring(content)
    namespace = {'ns': 'http://www.sitemaps.org/schemas/sitemap/0.9'}

    # Если это индекс sitemap — собираем ссылки на дочерние карты
    sub_sitemaps = root.findall('.//ns:sitemap/ns:loc', namespace)
    if sub_sitemaps:
        all_urls = []
        for sub in sub_sitemaps:
            all_urls.extend(get_sitemap_urls(sub.text, proxies))
        return all_urls

    # Если это обычный sitemap — собираем конечные URL
    urls = root.findall('.//ns:url/ns:loc', namespace)
    return [url.text for url in urls]

proxy = {
    "http": "http://user:pass@proxy_host:port",
    "https": "http://user:pass@proxy_host:port"
}

urls = get_sitemap_urls("https://example.com/sitemap_index.xml", proxies=proxy)
print(f"Найдено URL: {len(urls)}")

Этот скрипт рекурсивно проходит по индексному файлу, скачивает каждую дочернюю карту и собирает все конечные ссылки в один список. На выходе вы получаете полный перечень URL карточек товаров без единого лишнего перехода по навигации сайта.

Фильтрация нужных страниц по шаблонам URL

После того как вы получили полный список URL из sitemap, почти всегда нужно его отфильтровать. В одном sitemap-файле маркетплейса могут соседствовать карточки товаров, страницы категорий, статьи блога, страницы брендов и служебные страницы. Вам, скорее всего, нужны только карточки товаров определённой категории.

Для фильтрации обычно используют шаблоны URL. Например, если карточки товаров на сайте имеют вид /catalog/product/12345, а категории выглядят как /catalog/category/electronics, несложно отделить одно от другого простым сравнением сегментов пути. Для более сложных случаев, когда структура URL не такая очевидная, используют регулярные выражения — они позволяют задать шаблон один раз и мгновенно отфильтровать сотни тысяч ссылок.

Дополнительно полезно смотреть на теги <lastmod> внутри sitemap — они показывают дату последнего изменения страницы. Если вам нужен не полный каталог, а только обновлённые за последнюю неделю товары (например, для мониторинга новых позиций конкурентов), можно отфильтровать URL именно по этой дате и не трогать страницы, которые не менялись месяцами.

Настройка прокси для массового скачивания карт сайта

Несмотря на то что запросов к sitemap в разы меньше, чем при полном обходе, сайты вроде Wildberries и Ozon всё равно отслеживают подозрительную активность — слишком частые запросы с одного IP, нетипичные User-Agent, отсутствие заголовков браузера. Поэтому даже для скачивания файлов sitemap стоит использовать прокси, особенно если вы планируете регулярный мониторинг, а не разовый сбор каталога.

Для скачивания самих XML-файлов sitemap обычно достаточно прокси дата-центров — они быстрые и недорогие, а запросов к sitemap немного, и сайты реже применяют к ним жёсткую защиту по сравнению с обычными страницами каталога. А вот уже на этапе скачивания самих карточек товаров по собранным URL, где запросов на порядок больше и защита строже, лучше переходить на резидентные прокси — они используют реальные IP обычных пользователей и реже попадают под блокировку антибот-системами маркетплейсов.

Если вы мониторите каталог с мобильных версий сайта или API, который отдаёт данные только при мобильном трафике, стоит рассмотреть мобильные прокси — они используют IP мобильных операторов и считаются наиболее доверенными у большинства антифрод-систем.

Практическая настройка в скрипте или парсере простая: укажите хост, порт, логин и пароль прокси в соответствующих полях запроса (как показано в примере кода выше в параметре proxies), либо, если вы используете готовый no-code парсер или антидетект-браузер вроде Dolphin Anty или AdsPower для ручной проверки структуры сайта перед настройкой автоматического сбора, вставьте данные прокси в настройках профиля: откройте вкладку "Прокси" → выберите тип HTTP или SOCKS5 → вставьте хост, порт, логин, пароль → сохраните профиль.

Частые ошибки при работе с sitemap

Первая и самая частая ошибка — игнорировать robots.txt и пытаться угадать адрес sitemap наугад. Это трата времени, которую легко избежать, просто заглянув в файл правил индексации.

Вторая ошибка — не учитывать, что sitemap может быть неполным. Некоторые сайты специально исключают из sitemap страницы с низкой ценностью для SEO, но которые всё равно важны для мониторинга цен — например, страницы товаров не в наличии. Если после парсинга через sitemap количество собранных карточек заметно меньше ожидаемого, стоит свериться с количеством товаров, которое показывает сам сайт в категории, и при необходимости дополнить сбор точечным обходом недостающих разделов.

Третья ошибка — не кэшировать уже скачанные sitemap-файлы. Если вы запускаете мониторинг ежедневно, нет смысла каждый раз заново скачивать индексный файл и все дочерние карты — большинство из них не меняются каждый день. Сохраняйте список URL локально и обновляйте только то, что действительно изменилось по дате lastmod.

Четвёртая ошибка — забыть про заголовки запроса. Даже скачивание простого XML-файла может быть заблокировано, если запрос выглядит как от бота: без User-Agent, без Accept-Language, с нетипичными заголовками по умолчанию, которые ставит библиотека для запросов. Добавление реалистичных заголовков браузера в сочетании с прокси резко снижает вероятность блокировки на этом этапе.

Чек-лист запуска парсинга через sitemap

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

  • Проверили robots.txt сайта и нашли точный адрес sitemap или sitemap index
  • Убедились, что структура sitemap двухуровневая (индекс + дочерние карты) или одноуровневая
  • Проверили, не сжаты ли дочерние файлы в gzip
  • Определили шаблон URL для нужных страниц (карточки товаров, категории и т.д.)
  • Настроили фильтрацию по шаблону или по дате lastmod, если нужны только свежие позиции
  • Подключили прокси для скачивания sitemap-файлов и отдельно для скачивания самих карточек
  • Добавили реалистичные заголовки запроса (User-Agent, Accept-Language)
  • Настроили кэширование и сравнение по дате для повторных запусков мониторинга
  • Сверили итоговое количество URL с примерным количеством товаров на сайте

Заключение

Sitemap-first подход — это не хак и не обход защиты, а использование той информации, которую сайт сам публикует для поисковиков. Вместо тысяч запросов к навигации, категориям и пагинации вы получаете готовый список нужных страниц за несколько десятков запросов к XML-файлам. Это экономит время на запуск парсинга, снижает расход прокси-трафика и заметно уменьшает риск блокировки IP, потому что нагрузка на сайт в разы меньше, чем при полном обходе.

Если вы только начинаете мониторинг каталога Wildberries, Ozon или другого крупного сайта, начните со sitemap — скорее всего, вы сэкономите часы работы уже на первом запуске. Для скачивания самих sitemap-файлов хватит недорогих прокси дата-центров, а для последующего регулярного сбора данных по карточкам товаров, где риск блокировки выше, стоит присмотреться к резидентным прокси — они обеспечивают стабильную работу парсера без частых банов на длинной дистанции.