Вход Регистрация

Парсинг Walmart: как собирать данные о товарах и снизить риск блокировок

Как собирать цены, отзывы и другие данные Walmart с помощью Python. Разбираем поиск товаров, извлечение JSON и настройку прокси для снижения риска блокировок.

Команда Froxy 13 окт. 2026 7 мин
Парсинг Walmart: как собирать данные о товарах и снизить риск блокировок

Walmart — это крупнейшая сеть розничных и оптовых магазинов в США. У неё есть точки продаж ещё в 18 странах, и она пользуется бешеной популярностью из-за минимальных цен и исчерпывающего ассортимента. Компания продаёт буквально всё: от продуктов питания до бытовой техники и электроники. В феврале 2026 года рыночная капитализация Walmart впервые превысила 1 триллион долларов. Неудивительно, что официальный сайт Walmart пытаются пропарсить в поисках полезной для бизнеса информации: для мониторинга цен, анализа отзывов, поиска выгодных поставщиков, выявления товаров, пользующихся особым спросом, и т. п.

Итак, этот материал про парсинг данных Walmart: разрешает ли Walmart веб-скрейпинг, как он защищается от ботов, какие способы обхода существуют, как извлекать информацию о товарах и т. п.

TL;DR

Актуальная версия сайта Walmart построена на фреймворке Next.js. То есть сайт написан на JavaScript, и конечная версия HTML-кода рендерится непосредственно в браузере.

Тем не менее содержимое страниц передаётся браузеру в структурированном виде, в формате JSON. То есть, если найти нужный блок данных, информацию даже не придётся разбирать с помощью синтаксических анализаторов, таких как Beautiful Soup. В случае с Walmart данные нужно искать в теге <script id="__NEXT_DATA__">.

С другой стороны, сайт хорошо защищён от ботов, поэтому для масштабного сбора данных понадобятся качественные прокси и правдоподобная браузерная среда. Они нужны для создания убедительных пользовательских профилей и цифровых отпечатков.

Зачем парсить Walmart

Причины для автоматического веб-парсинга Walmart стандартные и совпадают с задачами анализа других крупных интернет-площадок:

  • Мониторинг цен и динамики скидок. Причём в привязке не только к стране или штату, но и к конкретному магазину, так как политика ценообразования в Walmart очень гибкая.
  • Анализ рынка и конкурентная разведка: сравнение ассортимента, спроса, сезонности, маркетинговых акций и т. п.
  • Анализ отзывов и рейтингов по товарам и сегментам с выделением тональности и общего настроя пользователей.
  • Выявление слабых позиций конкурентов для усиления своих: по наличию товаров, по цене, по качеству и пр.
  • Обучение языковых моделей.
  • Наполнение своих сайтов.

Какой бы ни была причина, техническая реализация везде будет плюс-минус одинаковой. Но сначала о юридической стороне вопроса.

Что можно и чего нельзя: легальность и этика парсинга Walmart

Легальность и этика парсинга Walmart

В правилах пользования сайтом (Terms of Use) в актуальной версии от 9 сентября 2026 года прямо запрещены автоматическое извлечение данных (скрапинг) и использование ботов. Запрещены даже ручные инструменты для извлечения информации. Сами данные нельзя скачивать, хранить, систематизировать и использовать для обучения ML-моделей.

При этом публичная доступность страниц ещё не отвечает на вопрос, разрешает ли Walmart парсинг. Нужно учитывать условия использования, юрисдикцию, цель сбора и то, как вы будете использовать данные дальше.

Как мы уже не раз говорили, юридические риски чаще связаны с нелегитимным использованием собранных данных, а не с самим сбором. Соблюдайте разумную нагрузку (частоту запросов), не собирайте персональные данные, учитывайте авторские права на контент и правила в файле robots.txt. Этот материал носит технический характер и не является юридической консультацией.

Важный момент: у Walmart нет публичного API для товаров, отсюда такая острая потребность в скрейпинге. Непубличный API предоставляется только партнёрам и селлерам, но в нём всё равно нет функционала для анализа чужих продуктов и сбора данных по категориям.

Как устроен Walmart изнутри (что нужно понять до кода)

Технически для сбора данных веб-страницы Walmart даже не обязательно рендерить в браузере. Информация доступна в виде JSON внутри кода страницы. В частности, основное содержимое страницы можно найти в теге:

<script id="__NEXT_DATA__" type="application/json">

Тег __NEXT_DATA__ в коде страницы Walmart

Вместо автоматического обхода страниц сайта для составления структуры будущего парсинга можно воспользоваться XML-картами сайта (sitemap), ссылки на которые есть в robots.txt. Для категорий особенно интересна карта sitemap_category.xml.

Карта сайта sitemap_category.xml в Walmart

Поиск и точечную настройку фильтров можно реализовать через параметры в URL. Например:

https://www.walmart.com/search?q=computer&typeahead=computer&min_price=30&max_price=910&sort=price_low

Подходы можно комбинировать: URL из XML-карт можно ставить на массовый обход краулера, а внутри страниц товаров данные собирать через JSON.

Как парсить страницы поиска

Как парсить страницы поиска Walmart

Наиболее частый практический вопрос: как найти все URL товаров Walmart для парсинга? Разберём поисковый запрос из примера выше:

https://www.walmart.com/search?q=computer&typeahead=computer&min_price=30&max_price=910&sort=price_low

Внутри URL-параметров зашита вся необходимая информация о поиске и фильтрации:

  • q=computer — искомое слово или фраза;
  • min_price=30 — стоимость от 30 долларов;
  • max_price=910 — до 910 долларов;
  • sort=price_low — сортировка по возрастанию цены.

Если вам нужна пагинация, достаточно добавить параметр page. Например:

https://www.walmart.com/search?q=computer&typeahead=computer&min_price=30&max_price=910&sort=price_low&page=2

Важное уточнение: Walmart отдаёт максимум 25 страниц независимо от общего числа результатов поиска. Поэтому простой пагинацией ВСЕ товары по запросу не собрать.

Обойти ограничение помогают фильтры: они сужают выдачу, и каждая выборка укладывается в лимит. У многих категорий в Walmart есть набор собственных фильтров. Они тоже участвуют в построении результирующего URL. Например, если отметить опцию фильтра для компьютеров с видеокартой Nvidia GeForce RTX 2060, то URL с запросом будет выглядеть так:

…search?q=computer&typeahead=computer&min_price=30&max_price=910&sort=price_low&affinityOverride=default&facet=graphics_processor%3ANVIDIA+GeForce+RTX+2060

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

Так как страницы с результатами поиска тоже отдают данные в JSON, их не нужно разбирать с помощью синтаксических анализаторов. Что не может не радовать.

Достаточно достать содержимое полей из JSON в теге __NEXT_DATA__. Ядро логики выглядит так:

from typing import Dict, List, Tuple
import json
from parsel import Selector

def parse_search(html_text: str) -> Tuple[List[Dict], int]:
    """extract search results from search HTML response"""
    sel = Selector(text=html_text)
    data = sel.xpath('//script[@id="__NEXT_DATA__"]/text()').get()
    data = json.loads(data)

    stacks = data["props"]["pageProps"]["initialData"]["searchResult"]["itemStacks"]
    stack = next(s for s in stacks if s.get("stackType") == "DEFAULT")

    total_results = stack["count"]
    results = [i for i in stack["items"] if i.get("__typename") == "Product"]
    return results, total_results

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

import re

name = item.get("name")
price = item.get("price")
description = re.sub(r"\s+", " ", re.sub(r"<[^>]+>", " ", item.get("description") or "")).strip()

Как парсить карточку товара

Как парсить карточку товара Walmart

Парсинг товаров Walmart строится по тем же принципам, что и парсинг поиска, только без циклов: товар-то всего один на странице.

Данные тоже хранятся в __NEXT_DATA__. Но так как полей очень много, нужен точный фильтр по конкретным ключам. Например, основными полями можно назвать: name, brand, priceString или price, availabilityStatus, averageRating и т. д.

Обратите внимание на количество и структуру полей с названием name:

Поля name в JSON карточки товара Walmart

Вот пример кода:

import json
import re
from parsel import Selector


def parse_item(html_text: str) -> dict:
    """Извлекает ключевые данные о товаре со страницы PDP."""
    sel = Selector(text=html_text)
    raw = sel.xpath('//script[@id="__NEXT_DATA__"]/text()').get()
    data = json.loads(raw)

    # Ядро — путь до product на item page
    product = data["props"]["pageProps"]["initialData"]["data"]["product"]
    reviews = data["props"]["pageProps"]["initialData"]["data"]["reviews"]

    price_info = product["priceInfo"]["currentPrice"]
    was_price = product["priceInfo"].get("wasPrice") or {}
    seller = product.get("sellerName")
    availability = product.get("availabilityStatusV2", {}).get("display")

    # Описание: длинное (BTF) или короткое (с HTML-тегами) — чистим
    long_desc = product.get("longDescription") or ""
    short_desc = product.get("shortDescription") or ""
    description = _clean(long_desc or short_desc)

    return {
        "name": product.get("name"),
        "brand": product.get("brand"),
        "us_item_id": product.get("usItemId"),
        "seller": seller,
        "price": price_info.get("price"),
        "price_string": price_info.get("priceString"),
        "was_price": was_price.get("price"),
        "availability": availability,
        "rating": reviews.get("averageOverallRating"),
        "reviews_count": reviews.get("totalReviewCount"),
        "description": description,
    }


def _clean(html: str) -> str:
    """Убирает HTML-теги и нормализует пробелы."""
    text = re.sub(r"<[^>]+>", " ", html)
    return re.sub(r"\s+", " ", text).strip()


if __name__ == "__main__":
    with open("item.html", encoding="utf-8") as f:
        html = f.read()

    item = parse_item(html)
    # Выводим данные в консоль
    for k, v in item.items():
        print(f"{k}: {v}")

Главная проблема: антибот Walmart

Все данные, которые мы описывали выше, можно получить без headless-браузеров: достаточно задействовать любой HTTP-клиент. Список из 8 лучших HTTP-клиентов для Python в 2026 году.

Грубо говоря, данные уже есть внутри HTTP-ответа сервера. Просто они структурированы не в виде HTML, а содержатся внутри JSON-структуры на уровне всего одного тега со скриптом (это огромная строка сплошного кода).

Однако, если вы запланируете масштабный веб-парсинг Walmart, то столкнётесь с другой проблемой: сервис активно защищается от ботов, применяя продвинутые технологии:

  • Анализ IP-адресов: серверные прокси с низким трастом могут не подойти.
  • Анализ цифровых отпечатков и браузерных профилей (заголовки, TLS/JA3 и т. п.).
  • Отпечатки JS-окружения.
  • Анализ частоты запросов.

Подробнее о цифровых отпечатках.

За защиту в Walmart отвечают топовые системы: Akamai и PerimeterX (ныне HUMAN Security).

Признаки того, что вашего бота раскусили: частый показ CAPTCHA, редирект на страницу блокировки, ошибки доступа (например, 403 Forbidden) или просто пустые ответы сервера.

Если вы уже столкнулись с банами от Walmart, пора задуматься о качественных ротируемых прокси с высоким уровнем доверия, а также об использовании headless-браузеров и имитации правдоподобных пользовательских профилей.

Подробнее о headless-браузерах.

Резидентные прокси для парсинга Walmart

Ротируемые резидентные IP с таргетингом по городам США помогают собирать цены и отзывы Walmart с меньшим риском блокировок.

Попробовать $1.99, 100Mb

Что реально снижает вероятность блокировки со стороны Walmart

Разбираемся, как снизить риск блокировки при парсинге Walmart. Принцип простой, но реализация требует внимательности и глубокого понимания процесса.

Во-первых, нужно работать с куками и токенами. А для этого как нельзя лучше подходят реальные браузеры. Автоматизировать управление браузерами можно через специальные инструменты:

Для них можно задать правдоподобные HTTP-заголовки и User-Agent. Но этого может оказаться недостаточно, так как современные системы защиты (веб-файрволы / WAF) научились определять headless-браузеры по особым отпечаткам и признакам. Например, флаг navigator.webdriver установлен в true, признак HeadlessChrome виден в User-Agent и Client Hints, браузер запущен с параметрами --enable-automation или --headless и т. п.

Чтобы их скрыть, нужно либо правильно выключить отдельные опции при запуске, либо установить специальные stealth-плагины. Например: playwright-stealth, undetected-chromedriver, nodriver и т. п.

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

Ещё вариант — запускать и работать через реальный браузер Chrome или Firefox. У первого есть встроенный протокол CDP (Chrome DevTools Protocol), а у Firefox применяются Marionette или WebDriver BiDi.

Во-вторых, даже если вы полностью скроете следы автоматизации, при парсинге Walmart бот может выдать себя из-за слишком высокой частоты обращений, а также из-за некачественного IP-адреса.

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

Проще всего это сделать с помощью профильного сервиса, такого как Froxy. Логика ротации настраивается не внутри скрипта парсинга, а на стороне сервиса, в личном кабинете, для каждого порта по отдельности.

Получается, что ротация IP — это ключевой элемент обхода блокировки от Walmart.

Прокси для скрейпинга Walmart

От использования прокси масса плюсов: процесс парсинга можно безболезненно масштабировать, а в случае бана IP легко заменить на новый и продолжить работу. Ваш реальный IP при этом остаётся скрыт.

Однако прокси бывают разных типов и под разные задачи.

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

Наиболее трастовые виды прокси:

  • Резидентные: подключения и запросы отправляются от лица провайдеров локального интернета, а именно они предоставляют услуги частным пользователям. Подробнее: плюсы и минусы резидентных прокси.
  • Мобильные: запросы отправляются из сетей мобильных операторов связи. Блокировать такие подключения крайне невыгодно, так как за одним IP могут работать многие реальные абоненты. Подробнее: преимущества и недостатки мобильных прокси.

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

При выборе конкретного провайдера обращайте внимание на количество адресов в пуле, на доступность и гибкость настроек геотаргетинга, на цены в пересчёте на объём трафика, а также на условия ротации IP.

У Froxy есть все типы бизнес-прокси: мобильные, резидентные и дата-центровые с ротацией.

Как подключить прокси

Как подключить прокси для парсинга Walmart

Пара примеров для подключения прокси к headless-браузерам.

Сначала Playwright:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(
        proxy={
            "server": "http://proxy.froxy.com:9000",
            "username": "ваш_логин",
            "password": "ваш_пароль"
        }
    )
    page = browser.new_page()
    page.goto("https://froxy.com/api/detect-ip")  # проверка IP
    print(page.content())
    browser.close()

А теперь Selenium (в скриптах на Python). Chrome игнорирует логин и пароль, переданные в --proxy-server, поэтому для авторизации на прокси в примере используется selenium-wire. Библиотека больше не поддерживается автором, так что фиксируйте её версию, а для новых проектов лучше выбирать Playwright.

# pip install selenium-wire
from seleniumwire import webdriver

proxy = "proxy.froxy.com:9000"
login = "ваш_логин"
password = "ваш_пароль"

options = {
    'proxy': {
        'http': f'http://{login}:{password}@{proxy}',
        'https': f'http://{login}:{password}@{proxy}',
        'no_proxy': 'localhost,127.0.0.1'
    }
}

driver = webdriver.Chrome(seleniumwire_options=options)
driver.get("https://froxy.com/api/detect-ip")  # проверка IP
print(driver.page_source)
driver.quit()

Заключение

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

Как раз для работы с этими системами вам понадобятся headless-браузеры и качественные ротируемые прокси. Арендовать мобильные и резидентные прокси можно у нас. Froxy — это более 10 млн IP с таргетингом до города и до 1000 параллельных портов.

Получайте уведомления о новых функциях и обновлениях Froxy

Узнайте первыми о новых функциях Froxy, чтобы оставаться в курсе событий происходящих на рынке цифровых технологий и получать новости о новых функциях Froxy.

Статьи по Теме

Как предотвратить остановку парсера на Python из-за обновлений сайта

Парсинг

Как предотвратить остановку парсера на Python из-за обновлений сайта

Даже малейшие изменения HTML ломают парсеры. В статье практические приёмы, которые помогут сделать ваш Python-код для скрапинга стабильным и надёжным.

Команда Froxy 16 окт. 2025 11 мин
Как подключить ИИ-агента к прокси-серверу Froxy

Кейсы

Как подключить ИИ-агента к прокси-серверу Froxy

Подключаем прокси-сервер к ИИ-агенту для выхода в сеть через сторонний IP-адрес. Пошаговая инструкция, примеры кода и полноценный скрипт для запуска.

Команда Froxy 9 сент. 2026 8 мин