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

В правилах пользования сайтом (Terms of Use) в актуальной версии от 9 сентября 2026 года прямо запрещены автоматическое извлечение данных (скрапинг) и использование ботов. Запрещены даже ручные инструменты для извлечения информации. Сами данные нельзя скачивать, хранить, систематизировать и использовать для обучения ML-моделей.
При этом публичная доступность страниц ещё не отвечает на вопрос, разрешает ли Walmart парсинг. Нужно учитывать условия использования, юрисдикцию, цель сбора и то, как вы будете использовать данные дальше.
Как мы уже не раз говорили, юридические риски чаще связаны с нелегитимным использованием собранных данных, а не с самим сбором. Соблюдайте разумную нагрузку (частоту запросов), не собирайте персональные данные, учитывайте авторские права на контент и правила в файле robots.txt. Этот материал носит технический характер и не является юридической консультацией.
Важный момент: у Walmart нет публичного API для товаров, отсюда такая острая потребность в скрейпинге. Непубличный API предоставляется только партнёрам и селлерам, но в нём всё равно нет функционала для анализа чужих продуктов и сбора данных по категориям.
Как устроен Walmart изнутри (что нужно понять до кода)
Технически для сбора данных веб-страницы Walmart даже не обязательно рендерить в браузере. Информация доступна в виде JSON внутри кода страницы. В частности, основное содержимое страницы можно найти в теге:
<script id="__NEXT_DATA__" type="application/json">
.png?width=1358&height=672&name=image1%20(1).png)
Вместо автоматического обхода страниц сайта для составления структуры будущего парсинга можно воспользоваться XML-картами сайта (sitemap), ссылки на которые есть в robots.txt. Для категорий особенно интересна карта sitemap_category.xml.

Поиск и точечную настройку фильтров можно реализовать через параметры в URL. Например:
https://www.walmart.com/search?q=computer&typeahead=computer&min_price=30&max_price=910&sort=price_low
Подходы можно комбинировать: URL из XML-карт можно ставить на массовый обход краулера, а внутри страниц товаров данные собирать через JSON.
Как парсить страницы поиска

Наиболее частый практический вопрос: как найти все 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 строится по тем же принципам, что и парсинг поиска, только без циклов: товар-то всего один на странице.
Данные тоже хранятся в __NEXT_DATA__. Но так как полей очень много, нужен точный фильтр по конкретным ключам. Например, основными полями можно назвать: name, brand, priceString или price, availabilityStatus, averageRating и т. д.
Обратите внимание на количество и структуру полей с названием name:

Вот пример кода:
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 с меньшим риском блокировок.
Что реально снижает вероятность блокировки со стороны 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 есть все типы бизнес-прокси: мобильные, резидентные и дата-центровые с ротацией.
Как подключить прокси

Пара примеров для подключения прокси к 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 параллельных портов.

