Volver al blog
Guías
Raluca PenciucLast updated on May 12, 202614 min read

Cómo raspar Walmart.com: Guía completa 2026

Cómo raspar Walmart.com: Guía completa 2026
En resumen: Esta guía explica paso a paso cómo extraer datos de productos de Walmart en Python de principio a fin, desde el análisis de los datos __NEXT_DATA__ hasta el escalado con proxies, reintentos y recuperaciones asíncronas. También traza una línea clara sobre cuándo una API de scraping gestionada supera al scraping «hazlo tú mismo».

Introducción: scraping de Walmart a gran escala en 2026

Walmart es el tipo de catálogo que justifica un proceso completo de análisis de precios o de inteligencia competitiva. Si solo necesitas un producto, un script de 10 líneas te bastará. Si necesitas miles de SKU actualizados a diario, el panorama cambia rápidamente: JSON oculto, límites de paginación, precios basados en el código postal y una pila anti-bot que analiza mucho más que tu User-Agent. Este tutorial de 2026 explica cómo extraer datos de productos de Walmart tal y como lo hacen los equipos en producción, incluyendo el momento en el que tiene sentido dejar de luchar contra la capa anti-bot y pasar a una API gestionada.

¿Por qué extraer datos de productos de Walmart?

Antes de entrar en cómo extraer datos de Walmart mediante código, conviene tener claro por qué se hace. Los casos de uso suelen agruparse en torno a unas pocas tareas: inteligencia de precios y supervisión de precios mínimos recomendados (MAP) entre distribuidores, mapeo de catálogos y categorías, alertas de reposición, análisis del sentimiento de las reseñas y cobertura de SKU de la competencia. Los anuncios propios de Walmart y los vendedores del mercado de terceros comparten el mismo esquema de página de producto, lo que hace que el conjunto de datos sea especialmente útil para comprender cómo se fijan los precios y se realizan los envíos de toda una categoría en tiempo real. Más allá de los títulos y los precios, las páginas de productos también muestran valoraciones, recuentos de reseñas, matrices de variantes, información del vendedor y datos de cumplimiento por código postal, los campos que realmente alimentan los modelos de precios.

Una breve advertencia previa: esto es una orientación general, no un consejo legal. Los datos públicos de productos en walmart.com se consideran generalmente de libre acceso cuando se recopilan a un ritmo lento y respetuoso que no perjudique al servicio, pero el riesgo legal depende de la jurisdicción y del contrato (las Condiciones de uso de Walmart son importantes). Lee walmart.com/robots.txt y respeta sus Disallow directrices. Mantente alejado de cualquier cosa que requiera iniciar sesión o que contenga datos personales, incluidas las direcciones de correo electrónico de los reseñadores, los números de pedido y los detalles de pago. El RGPD y la CCPA restringen cómo se maneja la información de identificación personal (PII), incluso si es técnicamente accesible. Una opción segura por defecto: limítate a los campos de producto, precio, reseñas y existencias, limita el acceso de forma estricta y consulta a un abogado antes de cualquier implementación comercial. (Si quieres profundizar más, nuestra guía más amplia sobre la legalidad del web scraping aborda la jurisprudencia).

Herramientas y configuración del proyecto

Necesitas Python 3.11+ y un entorno virtual limpio. El kit mínimo:

python -m venv .venv && source .venv/bin/activate
pip install requests httpx beautifulsoup4 pandas loguru
  • requests (o httpx si quieres asíncrono): el cliente HTTP
  • beautifulsoup4: análisis de HTML para el DOM visible
  • pandas: exportación tabular y pd.json_normalize para JSON anidado
  • loguru: registros estructurados que resisten ejecuciones prolongadas

Una estructura de carpetas razonable:

walmart-scraper/
├── walmart/
│   ├── fetch.py        # request + retry layer
│   ├── parse.py        # __NEXT_DATA__ extractor
│   ├── discover.py     # sitemap + search crawler
│   └── scaler.py       # async runner
├── data/
└── main.py

Cómo sirve Walmart los datos de productos: shell HTML + NEXT_DATA JSON

NEXT_DATA JSON

Walmart.com es una aplicación Next.js. Cuando solicitas una página de producto, el servidor devuelve un shell HTML mínimo más un <script id="__NEXT_DATA__"> elemento que contiene todo el estado prerenderizado de la página como JSON. A continuación, el navegador hidrata ese estado en el árbol de React que ves; los selectores CSS solo captan lo que sobrevive a la hidratación, lo cual en Walmart es un pequeño subconjunto del registro subyacente.

Esto es importante porque la mayoría de los tickets del tipo «mi scraper de Walmart no funciona» provienen de scrapers que solo usan CSS y persiguen nombres de clase que cambian con cada lanzamiento. El JSON estructurado en __NEXT_DATA__ es mucho más estable: contiene el objeto de producto canónico, incluyendo niveles de precios, variantes, valoraciones, vendedores, opciones de envío y disponibilidad según el código postal. Trátalo como el objetivo principal de análisis, y el DOM renderizado como un recurso de reserva para los campos que no puedas encontrar en el JSON.

Paso 1: cómo extraer datos de las páginas de productos de Walmart con Python

Empieza poco a poco. Elige una URL canónica del tipo https://www.walmart.com/ip/<slug>/<id> y aprende a extraer datos de Walmart con una sola solicitud GET antes de tocar la concurrencia o los proxies.

import requests

URL = "https://www.walmart.com/ip/AT-T-iPhone-14-128GB-Midnight/1756765288"
HEADERS = {
    "User-Agent": (
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) "
        "AppleWebKit/537.36 (KHTML, like Gecko) "
        "Chrome/124.0.0.0 Safari/537.36"
    ),
    "Accept-Language": "en-US,en;q=0.9",
}

resp = requests.get(URL, headers=HEADERS, timeout=20)
print(resp.status_code, len(resp.text))

Aquí hay dos respuestas interesantes: un 200 con el HTML del producto, o un 200 con un intersticial «¿Robot o humano?». El intersticial es un bloqueo suave, no un 4xx, así que comprueba siempre el cuerpo, no solo el código de estado. Si la respuesta contiene la cadena del intersticial o es inusualmente corta (unos pocos KB), considera la solicitud fallida y retírate.

Envía encabezados realistas, similares a los de un navegador

Una solicitud de Python muy básica se marca inmediatamente. Como mínimo, envía un User-Agent, además de Accept, Accept-Language, Sec-Ch-Ua, y un Referer (un resultado de búsqueda de Google o la página de categoría relevante de Walmart). Mantén un pequeño conjunto de cadenas de UA y rótalas por sesión, no por solicitud. Ten en cuenta también que Walmart inspecciona el handshake TLS (huellas JA3/JA4) además de los encabezados, por lo que una pila de encabezados perfecta de requests puede seguir fallando porque el perfil TLS subyacente grita «Python». Herramientas como curl_cffi ayudan a imitar una huella de navegador real cuando esto se convierte en el cuello de botella.

Paso 2: analizar los campos principales con BeautifulSoup

Para comprobaciones rápidas y para los campos que el JSON incrustado no expone, BeautifulSoup es más que suficiente.

from bs4 import BeautifulSoup

soup = BeautifulSoup(resp.text, "html.parser")

title = soup.find("h1", attrs={"itemprop": "name"})
price = soup.find("span", attrs={"itemprop": "price"})
images = [
    img.get("src")
    for img in soup.select("img[loading='lazy']")
    if img.get("src")
]

print(title.get_text(strip=True) if title else None)
print(price.get_text(strip=True) if price else None)

Esto funciona para el título y el precio visible, pero es frágil. Walmart cambia con frecuencia itemprop el marcado por clases de utilidad, y el precio visible a menudo difiere del precio canónico (precios para suscriptores, rebajas, precios locales de la tienda). Utiliza esto como una capa de verificación. Si quieres una base más sólida en los patrones de consulta de BeautifulSoup que estamos utilizando, nuestro tutorial dedicado a BeautifulSoup es una lectura complementaria muy útil. Trata el __NEXT_DATA__ JSON que extraemos a continuación como la fuente de verdad.

Extrae la carga útil completa de la etiqueta de script NEXT_DATA

NEXT_DATA

Cualquiera que se tome en serio el scraping de Walmart debería hacer __NEXT_DATA__ la primera parada. El registro completo del producto se encuentra dentro de esa única etiqueta de script.

import json

raw = soup.find("script", id="__NEXT_DATA__")
payload = json.loads(raw.string)

product = (
    payload["props"]["pageProps"]
    ["initialData"]["data"]["product"]
)

print(product["name"])
print(product["priceInfo"]["currentPrice"]["price"])
print(product["averageRating"], product["numberOfReviews"])

Ahora tienes un diccionario con nombre, niveles de precio, marca, modelo, galería de imágenes, descripciones, valoración media, número de reseñas, bloque del vendedor y un nodo de cumplimiento. Recórrelo una vez con pprint, y luego escribe las claves que realmente necesitas en una pequeña función extractora. Envuelve el acceso indexado en try/except KeyError, ya que Walmart reestructura el árbol (initialData.data.product frente a initialData.data.contentLayout) sin previo aviso.

Paso 3: ampliar más allá de un solo producto

Una URL te enseña el analizador; la producción necesita muchas. El patrón ligero es httpx.AsyncClient con un límite asyncio.Semaphore (empieza con 5 a 10 simultáneas), una fluctuación de 1 a 3 segundos entre solicitudes y la reutilización de la sesión por host para que las cookies se mantengan. Mantén la concurrencia conservadora: Walmart prefiere llamadas constantes y lentas antes que ráfagas. Coloca la recuperación y el análisis en grupos de tareas separados para que una excepción de análisis no interrumpa el bucle de recuperación. El mismo patrón aparece en nuestro tutorial de scraping de Amazon si quieres una referencia comparativa para otro catálogo grande.

Descubre las URL de los productos a través de los mapas del sitio y el punto final de búsqueda

Las URL se descubren de dos formas complementarias. En primer lugar, walmart.com/robots.txt enumera los índices de los mapas del sitio; el mapa del sitio de categorías es el más denso, con millones de /ip/ URL agrupadas por departamento. Extrae el índice, recupera cada mapa del sitio secundario e introduce las URL en tu cola. En segundo lugar, el punto final de búsqueda en el sitio acepta parámetros de consulta como q, page, sorty una larga lista de facetas. La respuesta HTML contiene una carga útil JSON con la lista de productos, así que analiza ese JSON en lugar de extraer las fichas renderizadas. Combina ambos: los mapas de sitio para la amplitud y la búsqueda para una cobertura que tenga en cuenta el posicionamiento de una categoría específica. (Nuestra guía definitiva de Walmart profundiza en la topología de los mapas de sitio si necesitas un mapa de referencia).

Gestiona la paginación de Walmart y el límite de 25 páginas

Según pruebas publicadas, Walmart limita una sola consulta de búsqueda a unas 25 páginas de resultados, independientemente de cuántos resultados coincidan realmente. Vuelve a probar antes de fiarte de cualquier cifra concreta, ya que el límite ha variado a lo largo de los años. La solución es la segmentación: divide una consulta amplia por categoría, faceta de marca, rango de precios y estado, y luego consulta cada segmento por debajo del límite por consulta. Ordenación inversa (sort=price_high además sort=price_low) y la combinación de facetas pueden duplicar aproximadamente la cobertura alcanzable hasta unas 50 páginas o 2000 productos por consulta, de nuevo según pruebas de terceros. Planifica tu descubrimiento como un árbol de consultas específicas, no como un bucle plano de números de página.

Recopila reseñas, variantes y datos de cumplimiento

Una vez que puedas analizar __NEXT_DATA__, los campos de alto valor están ahí mismo. Las reseñas y las valoraciones agregadas se encuentran bajo product.idmlInfo y product.reviews; la matriz por reseña, cuando está presente, incluye el número de estrellas, el título, el cuerpo y el indicador de compra verificada. Las variantes se encuentran bajo product.variantsMap clasificadas por SKU, con atributos como el color y la capacidad. El cumplimiento se encuentra en product.fulfillmentOptions, con las fechas estimadas de entrega, la posibilidad de recogida en tienda y un storeId campo. Los precios y la disponibilidad varían según el código postal, así que configura el assortmentStoreId y customer-zip antes de cada solicitud para garantizar los datos localizados.

reviews = product.get("reviews", {}).get("customerReviews", [])
variants = product.get("variantsMap", {})
fulfillment = product.get("fulfillmentOptions", [])

Exporta los resultados a CSV o JSON con pandas

Una vez que tengas una lista de diccionarios de productos, pandas se encarga del resto:

import pandas as pd

df = pd.json_normalize(records, sep="_")
df.to_csv("walmart_products.csv", index=False)
df.to_parquet("walmart_products.parquet", index=False)

json_normalize aplana las claves anidadas en columnas como priceInfo_currentPrice_price, lo cual es compatible con SQL. Escribe reseñas y variantes en tablas separadas con el ID del producto principal como clave externa, ya que aplanar campos de uno a muchos en una sola fila casi siempre te pasa factura más adelante.

Evita los bloqueos: proxies, rotación, reintentos y retroceso

La mayoría de los equipos que tratan el scraping de Walmart como un problema recurrente utilizan una pila antibloqueo en capas con cuatro componentes móviles.

  • Proxies. Las IP residenciales son casi indistinguibles de las de los compradores habituales de Walmart; las IP de centros de datos se marcan a gran escala. Las tasas de éxito publicadas por los proveedores son cifras de marketing, así que compara tus propias URL antes de comprometerte.
  • Cadencia de rotación. Rota por sesión para el descubrimiento tipo rastreo, y por solicitud para la monitorización de gran volumen. Mantén las sesiones activas al menos durante la duración de un flujo de varios pasos (búsqueda, producto, reseñas) para que las cookies se mantengan coherentes.
  • Reintentos con retroceso exponencial. En un 403 o un 429 (el código de estado HTTP definido en RFC 6585), espera 2^n + jitter segundos durante un máximo de 5 intentos antes de dejar la URL en espera para una ejecución posterior.
  • Disciplina de encabezados y cookies. Rote los grupos de UA junto con las IP y mantenga las cookies dentro de un requests.Session() para que Walmart vea a un único visitante coherente.
proxies = {
    "http":  "http://USER:PASS@gate.example.com:7777",
    "https": "http://USER:PASS@gate.example.com:7777",
}
resp = requests.get(URL, headers=HEADERS, proxies=proxies, timeout=20)

Un grupo de proxies gestionado con sesiones persistentes ahorra más tiempo que la rotación «casera» una vez que se superan unos cientos de páginas al día. Nuestra guía más detallada sobre la rotación de proxies en Python cubre los patrones de rotación exactos que hemos visto sobrevivir a las actualizaciones antibots de Walmart.

Utiliza una API de scraper de Walmart para cargas de trabajo de producción

Con unos pocos miles de páginas al día, las cuentas cambian. Gastas más en horas de ingeniería parcheando huellas JA3, actualizando grupos de UA y persiguiendo cambios de diseño de lo que gastarías en un punto final gestionado. Una API de scraper de Walmart como la WebScrapingAPI Scraper API gestiona la red de proxies, la pila de encabezados, la renderización de JavaScript y la resolución de CAPTCHA detrás de una URL y solo te cobra por las respuestas exitosas. Mantienes tu __NEXT_DATA__ código de análisis; solo cambias la capa de obtención. Si necesitas flujos de inicio de sesión o rastreo interactivo (navegar por variantes de tamaño, expandir páginas de reseñas), una API de navegador alojada amplía el mismo modelo a un Chrome remoto que programas con Puppeteer o Playwright.

Errores comunes y resolución de problemas

Guarda el HTML sin procesar de cada análisis fallido y luego compara las rutas clave semana a semana, ya que Walmart cambia las claves JSON de forma silenciosa. Si los precios parecen incorrectos, comprueba la cookie ZIP. Si las matrices de reseñas vuelven vacías, probablemente estés bloqueado, no hayas terminado. Registra siempre la longitud de la respuesta: una página de 4 KB con el mensaje «¿Robot o humano?» es la primera señal de que algo ha cambiado.

Conclusión y próximos pasos

Ahora tienes un plan completo sobre cómo realizar un web scraping de Walmart de principio a fin. Elige la parte más pequeña que aún no tengas (descubrimiento del mapa del sitio, reintentos, el analizador JSON) y ponla en marcha a continuación.

Conclusiones clave

  • Trata el __NEXT_DATA__ JSON, no el DOM renderizado, como tu objetivo principal de análisis en las páginas de productos y de búsqueda de Walmart.
  • El descubrimiento combina dos sistemas: walmart.com/robots.txt mapas de sitio para la amplitud del catálogo y el punto final de búsqueda para la cobertura con clasificación.
  • El límite de búsqueda de ~25 páginas que indica Walmart se resuelve segmentando las consultas por categoría, faceta, rango de precios y ordenación inversa.
  • Una pila antibloqueo real tiene varias capas: proxies residenciales, cadencia de rotación, retroceso exponencial en 403/429 y cookies de sesión coherentes.
  • Una vez que tu volumen diario supera los pocos miles de páginas, una API de scraper gestionada suele resultar más rentable en términos de coste total que el mantenimiento de un sistema anti-bot DIY.

Preguntas frecuentes

En general, sí, para datos públicos de productos, precios y reseñas, con algunas salvedades. La jurisprudencia estadounidense (en particular, el caso hiQ contra LinkedIn) ha indicado que el scraping de datos web públicos no constituye automáticamente una infracción de la CFAA, pero siguen siendo de aplicación los Términos de uso de Walmart, los derechos de autor sobre el texto de las reseñas y leyes como el RGPD y la CCPA. Evita las páginas que requieren inicio de sesión y los datos personales, modera el tráfico de forma respetuosa y consulta a un abogado antes de cualquier uso comercial.

¿Ofrece Walmart una API de productos pública que pueda utilizar en lugar de extraer datos?

Walmart cuenta con una API para afiliados y una API para vendedores del Marketplace, pero ninguna de ellas es una API de datos de productos de uso general para el público. La API para afiliados está restringida a la aprobación del programa y limitada en cuanto a campos y frecuencia, y la API del Marketplace solo expone datos de los artículos que tú mismo vendes en Walmart. Para una amplia cobertura de catálogo, precios y reseñas, el scraping es la opción más práctica en el momento de escribir este artículo.

¿Por qué mi scraper de Walmart muestra una página de captcha con la pregunta «¿Robot o humano?»?

Esa página es el desafío antibots de Walmart, que se activa cuando una o más señales parecen indicar que se trata de un bot: una IP de centro de datos, una huella digital TLS de Python, la ausencia del encabezado Sec-Ch-Ua , una cadencia de solicitudes inusual o la ausencia de cookies de origen. Se trata de un 200 blando, no de un 403, así que comprueba el cuerpo de la respuesta. La solución es por capas: IP residencial, TLS de navegador, pila de encabezados completa y control de ritmo de solicitudes.

¿Necesito Selenium o Playwright para extraer datos de Walmart, o bastan las solicitudes y BeautifulSoup?

Para la mayoría de las páginas de productos, búsqueda y reseñas, basta con requests más BeautifulSoup es suficiente, ya que los datos residen en el __NEXT_DATA__ . Recurre a Playwright o Puppeteer solo cuando necesites hacer clic en elementos interactivos (seleccionadores de tamaño, páginas de reseñas de carga diferida) o cuando el desafío antibots requiera un entorno JavaScript real para superarlo.

¿Cómo puedo extraer datos de miles de productos de Walmart sin alcanzar el límite de búsqueda de 25 páginas?

Deja de pensar en números de página y empieza a pensar en segmentos. Divide la consulta por categoría, marca, rango de precios ($0 to 25, $25 to 50, etc.), departamento y estado, de modo que cada consulta individual se ajuste al límite por consulta. Combina ordenaciones ascendentes y descendentes para ampliar cada segmento. Compara los resultados con el mapa del sitio de la categoría para completar cualquier dato que se haya omitido en la segmentación.

Conclusión

Extraer datos de Walmart en 2026 es un problema de ingeniería solucionable si se respeta la forma en que está construido el sitio. Analiza el __NEXT_DATA__ en lugar de luchar contra los cambios en los nombres de clase. Descubre las URL a través de los mapas del sitio y el punto final de búsqueda, segmenta tus consultas para eludir el límite de páginas y refuerza la capa de obtención con proxies residenciales, sesiones persistentes y retroceso exponencial ante los códigos 403 y 429. Exporta a través de pd.json_normalize para que la capa de análisis posterior esté satisfecha, y conserva el HTML sin procesar para poder comparar las rutas clave tras el próximo cambio silencioso de Walmart.

El cambio definitivo llega a gran escala. Si estás gastando más en horas de ingeniería para parchear la lógica antibots de lo que valen los datos, esa es tu señal. Nuestra API WebScrapingAPI se encarga de la capa de obtención, proxy y CAPTCHA detrás de un único punto final, por lo que conservas el analizador que acabas de crear y solo pagas por las respuestas exitosas. Sea cual sea la ruta que elijas, ahora tienes el manual para poner en marcha un canal de Walmart operativo esta misma semana.

Acerca del autor
Raluca Penciuc, Desarrollador full-stack @ WebScrapingAPI
Raluca PenciucDesarrollador full-stack

Raluca Penciuc es desarrolladora full stack en WebScrapingAPI, donde se dedica a crear rastreadores, mejorar las técnicas de evasión y buscar formas fiables de reducir la detección en los sitios web de destino.

Empieza a crear

¿Estás listo para ampliar tu recopilación de datos?

Únete a más de 2000 empresas que utilizan WebScrapingAPI para extraer datos de la web a escala empresarial sin ningún gasto de infraestructura.