Table of Contents

Extracción de datos de productos de Walmart utilizando Massive

Jason Grad
Administrador de red proxy
March 4, 2025
Table of Contents

+

Walmart ofrece una amplia colección de datos de productos a través de su sitio web Walmart, que es un recurso valioso para empresas, investigadores y vendedores. Ya sea que accedas a una sola página de producto de Walmart o navegues por varias páginas de Walmart, recopilar información relevante puede resultar difícil debido a las sólidas medidas antiraspado de Walmart.

Este artículo explicará cómo los proxies Massive facilitan la elusión de estas restricciones y te permiten recopilar detalles de los productos de Walmart en ubicaciones específicas.

¡Vamos a sumergirnos!

Casos de uso comunes de datos de productos de Walmart

El sitio web de Walmart contiene información valiosa que se puede utilizar para diversos fines, entre ellos:

  • Investigación de productos y mercados: Analice los puntos de datos de cada página de producto de Walmart, incluidas las reseñas y las calificaciones para comprender las preferencias de los consumidores y las tendencias del mercado.
  • Análisis de la competencia: Obtenga información sobre las estrategias de precios y productos de la competencia
  • Monitorización y optimización de precios: Realice un seguimiento de los precios en tiempo real para ajustar las estrategias de precios y mantenerse competitivo.
  • Administración de inventario: Supervise los niveles de stock y la disponibilidad de los productos para optimizar las operaciones de inventario y cadena de suministro.

Por qué usar proxies en el raspado web

Los proxies desempeñan un papel crucial en el raspado web al actuar como intermediarios entre su raspador y el sitio web de destino. Ofrecen varios beneficios clave, que incluyen:

  1. Evitar las prohibiciones de IP: Los proxies permiten rotar las direcciones IP, lo que reduce el riesgo de detección y bloqueo por parte del sitio web.
  2. Acceso a contenido restringido geográficamente: Algunos contenidos o productos solo están disponibles en determinadas regiones. Los proxies te permiten dar la impresión de que estás navegando desde una ubicación diferente.
  3. Omitir los límites de velocidad: Los sitios web suelen imponer límites al número de solicitudes desde una sola dirección IP. Los proxies ayudan a distribuir tus solicitudes en varias direcciones IP, lo que te permite evitar estas restricciones.

Comprensión de las medidas antiraspado de Walmart

Extraer datos de Walmart puede ser un desafío debido a las varias protecciones vigentes. Estos son algunos problemas comunes a los que puede enfrentarse:

  1. Desafíos de CAPTCHA: Walmart usa CAPTCHA para bloquear los bots. Si bien son relativamente fáciles de resolver para los humanos, pueden resultar difíciles para los scripts automatizados.
  2. Limitación de velocidad: Walmart restringe la cantidad de solicitudes que puede realizar en un período breve. Si superas este límite, es posible que se bloquee tu acceso.
  3. Bloqueo de IP: Si Walmart detecta una actividad de extracción excesiva desde una sola dirección IP, es posible que bloquee esa IP.
  4. Cambiar el diseño de la página: Walmart actualiza con frecuencia la estructura de sus páginas web. Estos cambios pueden dañar tu código de scraping y requerir que lo actualices con regularidad.
  5. Contenido dinámico: La página de búsqueda de Walmart y otras páginas de Walmart utilizan JavaScript para cargar el contenido de forma dinámica, lo que puede hacer que el scraping sea más complejo.

Por ejemplo, creé un script para extraer datos de varias páginas de productos en Walmart. Sin embargo, mi scraper fue finalmente bloqueado por el sistema de detección de bots de Walmart, como puedes ver en la imagen de abajo.

Este desafío, que me pide que «mantenga pulsado» para comprobar mi condición humana, es un mecanismo CAPTCHA común que utilizan los sitios web para evitar que los bots accedan a su contenido.

En ese momento, mi raspador ya no podía acceder a los datos, lo que era frustrante y consumía mucho tiempo. Pero no se preocupe, hay una solución. Exploraremos cómo Proxies residenciales Massive puede ayudarlo a recopilar los datos de los productos de Walmart.

Proxies residenciales frente a proxies de centros de datos para Walmart Scraping: qué funciona mejor

Llevo un tiempo analizando Walmart, y tu elección de apoderado marca la diferencia. Según mi experiencia, el costo adicional de los proxies residenciales vale la pena. Utilizan direcciones IP reales asignadas por los ISP reales a los propietarios de viviendas, por lo que, según los sistemas de Walmart, pareces un comprador normal navegando desde casa. Sí, cuesta más, pero la calidad de los datos y las sesiones de raspado ininterrumpidas hacen que valga la pena.

Los proxies de los centros de datos son tentadores (son más rápidos y baratos), pero los sistemas antibots de Walmart se han vuelto bastante buenos para detectarlos.

Beneficios de usar proxies Massive para el scraping de Walmart

Los proxies residenciales Massive ofrecen varios beneficios clave:

  1. 🌐 Alcance global: Acceda a más de 195 países: ciudades objetivo, códigos postales o ASN
  2. 🔒 Anonimato: Millones de direcciones IP rotativas y rotación personalizable (por solicitud o de 1 a 60 minutos)
  3. ⚡ Velocidad y fiabilidad: Tasa de éxito del 99,8%, tiempos de respuesta inferiores a 0,7 s y tiempo de actividad del 99,9%
  4. 💰 Económico: Empieza con 4,49$ por GB con planes escalables
  5. ✅ Cumple con las normas éticas: Proxies totalmente compatibles con GDPR/CCPA, de origen 100% ético
  6. 🛠️ Soporte: A través de Slack, Skype, correo electrónico o tickets

Cómo empezar con Massive

Si eres nuevo en Massive, registrarse para obtener una cuenta. Elija un plan que se adapte a sus necesidades.

Nota: Ofrecemos un Prueba gratuita de 2 GB para empresas. Para empezar, rellena este formulario. Si necesitas más ancho de banda, póngase en contacto con nuestro equipo de ventas, y te ayudaremos.

Tras registrarte, ve a la Panel de control Massive para recuperar sus credenciales de proxy (nombre de usuario y contraseña).

Pasos de configuración:

Visite el Inicio rápido sección para personalizar la configuración de su proxy:

  • Elige tu protocolo preferido (HTTP, HTTPS o SOCKS5)
  • Selecciona entre proxies giratorios o fijos
  • Defina las preferencias de segmentación geográfica (país, estado, ciudad o código postal)

Una vez configurado, obtendrá un comando cURL listo para usar para su caso de uso específico.

Para ver funciones avanzadas, como la segmentación basada en la ubicación y las sesiones fijas, consulta la Documentación Massive. Los documentos proporcionan instrucciones paso a paso para aprovechar al máximo los proxies residenciales Massive.

Con esta configuración, puede usar Massive Proxies para extraer los datos de los productos de Walmart de una región específica.

Construyendo Walmart Scraper con Python y proxies Massive

Si bien puedes usar una API de raspado de Walmart, crear tu propia solución con la configuración adecuada del agente de usuario te brinda más control sobre el proceso de raspado. Exploremos cómo crear un raspador de Python para los datos de los productos de Walmart utilizando proxies Massive y Playwright. Playwright ayuda a automatizar las acciones del navegador y a gestionar el contenido dinámico, como cargar más productos a medida que te desplazas.

Usando Massive proxies, puede extraer datos de Walmart desde cualquier lugar donde opere Walmart, simplemente cambiando la configuración del proxy. Para este tutorial, mostraremos cómo extraer datos de productos en Washington, EE. UU..

Extraeremos los siguientes datos de cada producto de Walmart: nombre del producto, valoración, número de reseñas, precio, precio anterior (si está disponible), información de envío y enlace al producto.

1. Configure su entorno de Python

Para empezar, asegúrese de tener Python instalado en su máquina. A continuación, instala Playwright y los binarios de navegador necesarios:

pip install playwright
playwright install

2. Importar las bibliotecas necesarias

Ahora, empecemos a escribir el guion. Deberás importar las siguientes bibliotecas:

  • asíncrono para programación asincrónica.
  • aleatorio para añadir retrasos aleatorios.
  • json para guardar nuestros datos extraídos.
  • dramaturgo asíncrono de Playwright para controlar el navegador y automatizar el raspado.
import asyncio
import random
import json
from playwright.async_api import async_playwright

3. Inicie el navegador con una configuración de proxy Massive

Inicie el navegador Chromium en modo headless con la configuración de proxy. Esto le permite eludir las medidas antiraspado de Walmart utilizando Massive proxies.

async with async_playwright() as p:
    browser = await p.chromium.launch(
        headless=True,
        args=[
            "--disable-blink-features=AutomationControlled",
            "--disable-infobars",
            "--disable-extensions",
            "--disable-popup-blocking",
            "--no-sandbox",
        ],
    )

A continuación, configure el contexto del navegador para dirigir el tráfico Massive proxies residenciales:

context = await browser.new_context(
    user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
    locale="en-GB",
    proxy={
        "server": "https://network.joinmassive.com:65535",
        "username": "MASSIVE_USERNAME-country-US-subdivision-WA",
        "password": "MASSIVE_PASSWORD",
    },
    viewport={"width": 1920, "height": 1080},
)

Abre una nueva página y navega hasta los resultados de búsqueda de Walmart:

page = await context.new_page()
await page.goto(
    "https://www.walmart.com/search?q=windows+laptops",
    wait_until="domcontentloaded",
)

Este código dirigirá el navegador a la página de resultados de búsqueda de Walmart para «ordenadores portátiles con Windows».

4. Desplace y extraiga datos

Dado que Walmart carga más productos a medida que te desplazas, simularemos un desplazamiento similar al de un humano para asegurarnos de que todos los productos estén cargados:

async def scroll_and_extract(page):
    previous_height = await page.evaluate("document.body.scrollHeight")
    while True:
        await page.evaluate("window.scrollBy(0, Math.random() * 100 + 300)")
        await asyncio.sleep(random.uniform(1, 2))

        new_height = await page.evaluate("document.body.scrollHeight")
        if new_height == previous_height:
            break
        previous_height = new_height

5. Extraer la información del producto

Ahora extraemos detalles como el nombre del producto, el precio y las calificaciones mediante selectores de CSS. A continuación, te explicamos cómo puedes extraer cada información:

A. Nombre del producto:

Fragmento de código:

product_name = await product.query_selector('span[data-automation-id="product-title"]')
product_name = await product_name.inner_text() if product_name else "N/A"

B. Precio actual:

Fragmento de código:

price = await product.query_selector(
    'div[data-automation-id="product-price"] div[aria-hidden="true"]'
)
price = await price.inner_text() if price else "N/A"

C. Precio anterior:

Fragmento de código:

previous_price = await product.query_selector("div.gray.strike")
previous_price = await previous_price.inner_text() if previous_price else "N/A"

D. Calificación del producto:

Fragmento de código:

rating = await product.query_selector('span[data-testid="product-ratings"]')
rating = await rating.get_attribute("data-value") if rating else "N/A"

E. Número de reseñas:

Fragmento de código:

num_reviews = await product.query_selector('span[data-testid="product-reviews"]')
num_reviews = await num_reviews.inner_text() if num_reviews else "N/A"

F. Información de envío:

Fragmento de código:

shipping_info = await product.query_selector('div[data-automation-id="fulfillment-badge"]')
shipping_info = await shipping_info.inner_text() if shipping_info else "N/A"

Aquí está el código combinado que devuelve toda la información de cada producto.

async def extract_product_info(product):
    title_selector = 'span[data-automation-id="product-title"]'
    price_selector = 'div[data-automation-id="product-price"] div[aria-hidden="true"]'
    previous_price_selector = "div.gray.strike"
    rating_selector = 'span[data-testid="product-ratings"]'
    reviews_selector = 'span[data-testid="product-reviews"]'
    shipping_info_selector = 'div[data-automation-id="fulfillment-badge"]'
    product_url_selector = 'a[href*="/ip/"]'

    title = await product.query_selector(title_selector)
    product_url_element = await product.query_selector(product_url_selector)
    product_url = (
        await product_url_element.get_attribute("href") if product_url_element else None
    )

    if product_url and "from=/search" in product_url:
        current_price = await product.query_selector(price_selector)
        previous_price = await product.query_selector(previous_price_selector)
        rating = await product.query_selector(rating_selector)
        num_reviews = await product.query_selector(reviews_selector)
        shipping_info = await product.query_selector(shipping_info_selector)

        return {
            "title": await title.inner_text() if title else "N/A",
            "product_url": f"https://www.walmart.com/{product_url}",
            "current_price": (
                await current_price.inner_text() if current_price else "N/A"
            ),
            "previous_price": (
                await previous_price.inner_text() if previous_price else "N/A"
            ),
            "rating": await rating.get_attribute("data-value") if rating else "N/A",
            "num_reviews": await num_reviews.inner_text() if num_reviews else "N/A",
            "shipping_info": (
                await shipping_info.inner_text() if shipping_info else "N/A"
            ),
        }
    return None

6. Raspe varias páginas

Para raspar varias páginas, buscaremos el botón «Página siguiente» y haremos clic en cada una de ellas

async def scrape_walmart(page, current_page):
    async def product_info_generator(current_page):
        while True:
            print(f"Scraping page {current_page}...")
            await scroll_and_extract(page)

            # Extract product information
            product_elements = await page.query_selector_all(
                'div[role="group"][data-item-id]'
            )

            for product in product_elements:
                product_data = await extract_product_info(product)
                if product_data:
                    yield product_data
            # Check for the "Next Page" button
            next_page_button = await page.query_selector('a[data-testid="NextPage"]')
            if next_page_button:
                await next_page_button.click()
                current_page += 1
            else:
                break

    return product_info_generator(current_page)

7. Guarde los datos en un archivo JSON

Una vez que se hayan extraído todos los datos, guárdelos en un archivo JSON:

def save_data_to_json(data, filename):
    with open(filename, "w", encoding="utf-8") as json_file:
        json.dump(data, json_file, ensure_ascii=False, indent=4)
    print(f"Product information saved to {filename}")

8. Ejecutando el Scraper

Esta es la función principal para iniciar el raspador Walmart:

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()
        await page.goto(
            "https://www.walmart.com/search?q=windows+laptops",
            wait_until="domcontentloaded",
        )

        current_page = 1
        product_info_generator = await scrape_walmart(page, current_page)

        with open("walmart_products.json", "w", encoding="utf-8") as json_file:
            json_file.write("[")
            first = True
            async for product in product_info_generator:
                if not first:
                    json_file.write(",\\n")
                json.dump(product, json_file, ensure_ascii=False, indent=4)
                first = False
            json_file.write("\\n]")
            print("Product information saved to walmart_products.json")


asyncio.run(main())

Resultado final

Puedes encontrar el código completo para extraer datos de Walmart usando proxies Massive en La esencia de GitHub.

Cuando ejecutes el código, el resultado tendrá un aspecto similar al siguiente:

[
    {
        "title": "14.1in Windows 11 Pro Laptop, 8GB DDR4, 512GB SSD Computer, Intel Celeron, 1920x1080, 1TB Expansion, Silver",
        "product_url": "<https://www.walmart.com/ip/Temlicolo-14-1-Laptop-8GB-RAM-PC-512GB-SSD-Intel-Celeron-N4020C-up-to-2-8GHz-Windows-11-Pro-Webcam-1TB-SSD-Expansion-Silver/1519228026?classType=VARIANT&selectedSellerId=101196098&from=/search>",
        "current_price": "$227.89",
        "previous_price": "$499.99",
        "rating": "4.5",
        "num_reviews": "220",
        "shipping_info": "Free shipping, arrives in 2 days"
    },
    {
        "title": "HP Stream 14 inch Windows Laptop Intel Processor N4120 4GB RAM 64GB eMMC Pink (12-mo. Microsoft 365 included)",
        "product_url": "<https://www.walmart.com/ip/HP-Stream-14-inch-Laptop-Intel-Processor-N4102-4GB-RAM-64GB-eMMC-Pink-12-mo-Microsoft-365-included/443153637?classType=VARIANT&athbdg=L1102&from=/search>",
        "current_price": "$199.00",
        "previous_price": "$229.00",
        "rating": "4",
        "num_reviews": "11,240",
        "shipping_info": "Free pickup today\\nDelivery today\\nFree shipping, arrives today"
    },
    {
        "title": "Jumper 15.6\\" Windows 11 Laptop 4GB DDR4 128GB Rom Computer with Intel Celeron 5205U, Come with 1-Yr Free Office 365",
        "product_url": "<https://www.walmart.com/ip/Jumper-15-6-Laptop-4GB-DDR4-128GB-ROM-Computer-with-Dual-Core-Intel-Celeron-5205U-CPU-1-yr-Office-Free-1366x768-HD/9497006657?classType=VARIANT&selectedSellerId=101078354&from=/search>",
        "current_price": "$199.89",
        "previous_price": "$379.99",
        "rating": "4.2",
        "num_reviews": "6",
        "shipping_info": "Free shipping, arrives in 2 days"
    }
]

Consulta el completo Archivo JSON con todos los datos de la «computadora portátil Windows» de Walmart extraídos de todas las páginas disponibles.

Finalizando

En este artículo se explica cómo aprovechar los proxies Massive puede ayudarlo a extraer datos valiosos y, al mismo tiempo, minimizar el riesgo de detección y bloqueo. Para obtener más información sobre la configuración de los proxies o sobre las mejores prácticas, no dejes de visitar nuestra documentación oficial.

¿Estás listo para empezar? Regístrate hoy mismo en Massive Proxies 🚀

FAQ

+

+

+

+

+

+

+

+

+

+

Discover your ideal proxy

Loading...