Back to Blog

¿Listo para una prueba gratuita de 2 GB?

Reserva una llamada con uno de nuestros Expertos en Datos para desbloquear una prueba gratuita de gran tamaño.

INICIAR PRUEBA
Cómo extraer datos de productos de Amazon utilizando proxies masivos

Cómo extraer datos de productos de Amazon utilizando Massive proxis

Jason Grad
Administrador de red proxy
February 26, 2025

Amazon proporciona una amplia colección de datos de productos (datos de Amazon) que son un recurso valioso para las empresas, los investigadores y los especialistas en marketing. Amazon requiere una cuidadosa consideración de sus medidas contra el scraping. En esta guía se explica cómo utilizar proxies masivos para realizar solicitudes HTTP eficaces y recopilar datos de las páginas de productos de Amazon, evitando al mismo tiempo los bloqueos de IP.

¡Vamos a sumergirnos!

Casos de uso comunes de los datos de productos de Amazon

Cuando se trata del raspado web de Amazon, hay varias aplicaciones valiosas:

  • Monitorización y optimización de precios: Realice un seguimiento de los precios en tiempo real mediante solicitudes HTTP automatizadas para ajustar las estrategias.
  • Investigación de productos y mercados: Recopila los detalles y las reseñas de los productos para obtener información sobre las preferencias de los consumidores y los análisis del mercado.
  • Análisis de la competencia: Recopile sistemáticamente datos sobre los precios de la competencia y las estrategias de productos.
  • Administración de inventario: Supervise los niveles de existencias para optimizar las cadenas de suministro.

Por qué usar proxies en el raspado web

Los proxies son cruciales para el raspado web de Amazon porque:

  • Evite las prohibiciones de IP: Rote las direcciones IP y combínelas con agentes de usuario rotativos para evitar la detección.
  • Acceda a contenido bloqueado por región: Utilice proxies para imitar ubicaciones y eludir las restricciones geográficas.
  • Omitir los límites de velocidad: Distribuya las solicitudes HTTP en varias direcciones IP para evitar la limitación.

Comprender las medidas antiraspado de Amazon

Extraer datos de Amazon no es fácil debido a las diversas medidas de protección vigentes. Estos son algunos de los obstáculos más comunes con los que te puedes encontrar:

  • CAPTCHA: Amazon suele utilizar los CAPTCHA para distinguir entre usuarios humanos y bots. Estos CAPTCHA son fáciles para los humanos, pero difíciles de resolver para los scripts automatizados. Si no se gestionan de manera eficaz, estos desafíos pueden bloquear sus intentos de raspado.
  • Límite de velocidad: Para evitar la sobrecarga del servidor, Amazon limita el número de solicitudes que puedes realizar en un período de tiempo determinado. Es importante respetar estos límites para evitar que te bloqueen.
  • Bloqueo de direcciones IP: Si Amazon detecta una actividad de scraping excesiva en una dirección IP específica, puede bloquearla por completo.
  • Estructura dinámica de la página: Amazon actualiza con frecuencia el diseño y los elementos de su sitio web, lo que puede romper los scripts de raspado existentes que se basan en elementos de destino estáticos. Esto significa que es posible que tengas que ajustar constantemente tu código para mantenerte al día con estos cambios.

Por ejemplo, escribí un script de Python Playwright para extraer datos de varias páginas de productos en Amazon. Sin embargo, mi raspador finalmente se bloqueó, como se muestra en la imagen de abajo.

Ya no podía extraer los datos, lo cual era realmente frustrante y consumía mucho tiempo. Sin embargo, no te preocupes, analizaremos la solución: usar proxies residenciales masivos para eliminar los datos de manera que pasen desapercibidos.

Proxies residenciales frente a proxies de centros de datos: ¿cuál es el mejor para Amazon Scraping?

Al seleccionar proxies para eliminar Amazon, es importante determinar qué tipo es el mejor: residencial o de centro de datos.

Los proxies residenciales utilizan las direcciones IP proporcionadas por los proveedores de servicios de Internet (ISP) a los usuarios reales, lo que hace que parezcan conexiones de usuario genuinas y sea menos probable que se detecten.

Por otro lado, los proxies de centros de datos provienen de centros de datos y, por lo general, son más rápidos y económicos, pero también es menos probable que eviten ser detectados.

Proxies residenciales masivos ofrecen un gran conjunto de direcciones IP, lo que garantiza un alto nivel de anonimato y reduce el riesgo de bloqueo.

Beneficios de usar proxies masivos para Amazon Scraping

Los proxies residenciales masivos ofrecen varios beneficios clave:

  • Anonimato: Un conjunto grande de direcciones IP reduce el riesgo de bloqueo.
  • Cobertura global: Acceda a direcciones IP de más de 195 países.
  • Alto rendimiento: Tasa de éxito del 99% y tiempos de respuesta rápidos.
  • Ancho de banda flexible: Elija entre varios niveles de precios para satisfacer sus necesidades.
  • Cumplimiento ético: De origen 100% ético y compatible con el RGPD y la CCPA.
  • Soporte confiable: Supervisión del tiempo de actividad ininterrumpido y una garantía de tiempo de actividad del 99,9%.

Cómo empezar con Massive

Para usar los proxies residenciales masivos para el scraping de Amazon, crea una cuenta en Masivo y seleccione un plan que se adapte a sus necesidades de datos y presupuesto. Una vez que tu cuenta esté activa, dirígete a la sección de inicio rápido:

Puedes ver dos opciones de segmentación: Predeterminado y Filtros de destino. El Filtros de destino ofrecen opciones de filtrado más específicas, que analizaremos más adelante. Por ahora, empecemos con Predeterminado segmentación.

Seleccione el HTTPS protocolo y elige Proxies giratorios. Dado que Amazon emplea medidas antiraspado avanzadas, los proxies rotativos te ayudarán a evitar que te detecten. Esto generará un comando cURL que contiene la URL, el nombre de usuario y la contraseña del servidor. Utilizaremos estas credenciales más adelante cuando implementemos el código.

A continuación, echemos un vistazo a la Filtro de destino opciones. Tiene la flexibilidad de elegir entre más de 195 países. Por lo tanto, selecciona el país, estado, ciudad o código postal que desees para realizar un raspado específico.

Por ejemplo, seleccionemos los Estados Unidos y la ciudad de Washington para eliminar los productos de Amazon de esa región específica.

Creación de un Amazon Scraper con Python y Massive

Veamos el proceso de creación de un raspador de Python para extraer todos los datos de Amazon utilizando proxies masivos y Playwright. La biblioteca Playwright es muy útil para automatizar las interacciones del navegador, especialmente para el contenido cargado dinámicamente.

Extraeremos los siguientes datos de cada producto de Amazon: nombre del producto, valoración, número de reseñas, precio, cupón (si está disponible) 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

En tu archivo de Python, importa las bibliotecas necesarias para la programación asincrónica y la automatización del navegador:

import asyncio
from playwright.async_api import async_playwright

3. Crea la función de raspado

Defina una función asincrónica denominada amazon_shopping_search. Esta función utilizará una consulta de búsqueda y un dominio opcional (el predeterminado es «com»):


async def amazon_shopping_search(search_query, domain='com'):

4. Prepare la URL de búsqueda

Formatee la consulta de búsqueda sustituyendo los espacios por + para crear una URL válida para la búsqueda:

q = search_query.replace(" ", "+")
base_url = f"<https://www.amazon>.{domain}/s?k={q}"

5. Inicie el navegador con la configuración de proxy

Inicie el navegador con la configuración de proxy y añada las credenciales de su cuenta de Massive.

async with async_playwright() as p:
    browser = await p.chromium.launch(
        headless=True,
        proxy={
            "server": "<https://network.joinmassive.com:65535>",
            "username": "YOUR_MASSIVE_USERNAME",
            "password": "YOUR_MASSIVE_PASSWORD"
        }
    )

Cuando se inicie, todas las solicitudes realizadas por el navegador pasarán por el servidor proxy especificado, lo que ayuda a mantener el anonimato.

6. Crea una página nueva

Cree una nueva página en el navegador e inicialice una variable para rastrear el número de página actual:

page = await browser.new_page()
page_number = 1

7. Bucle de raspado

Implemente un bucle que continúe hasta que no haya más páginas que raspar. Para cada iteración, construye la URL de la página actual y navega hasta ella:

8. Extraer la información del producto

Para cada producto de la página, extrae varios detalles como el nombre, el precio, la valoración, las reseñas, el cupón y el enlace mediante selectores de CSS. Si un detalle no está disponible, asigna «N/A».

A continuación te explicamos cómo puedes extraer cada información:

A. Nombre del producto:

while True:
    url = f"{base_url}&page={page_number}"
    print(f"Scraping page {page_number}...")
    await page.goto(url, wait_until="domcontentloaded")

Fragmento de código:

name = await product.query_selector("[data-cy=title-recipe]")
name = await name.inner_text() if name else "N/A"


B. Precio del producto:

Fragmento de código:

current_price = await product.query_selector(".a-price > .a-offscreen")
current_price = await current_price.inner_text() if current_price else "N/A"

C. Calificación del producto:

Fragmento de código:

rating = await product.query_selector("[data-cy=reviews-ratings-slot]")
rating = await rating.inner_text() if rating else "N/A"

D. Reseñas de productos:

Fragmento de código:


reviews = await product.query_selector(
    ".rush-component > div > span > a > span, a.a-link-normal > span.a-size-base"
)
reviews = await reviews.inner_text() if reviews else "N/A"

E. Cupón de producto:

Fragmento de código:

coupon = await product.query_selector(".s-coupon-unclipped")
coupon = await coupon.inner_text() if coupon else "N/A"

F. Enlace al producto:

Fragmento de código:

link = await product.query_selector("a.a-link-normal")
if link:
    full_link = await link.get_attribute("href")
    link = (
        f'<https://www.amazon>.{domain}{full_link.split("/ref=")[0]}'
        if full_link
        else "N/A"
    )
else:
    link = "N/A"

9. Compruebe la página siguiente

Busca un enlace a la página siguiente. Si no existe, sal del círculo:

next_page = await page.query_selector(".s-pagination-next")
if not next_page:
    print("No more pages to scrape.")
    break

10. Cierra el navegador

Después de raspar todas las páginas, ¡cierra el navegador!

await browser.close()

11. Función principal

Por último, defina una función asincrónica principal que inicie el proceso de raspado con una consulta de búsqueda específica. Ejecute esta función para iniciar el raspado:

async def main():
    await amazon_shopping_search(search_query="office chair", domain="com")

# Run the main function
asyncio.run(main())

Guardar datos en CSV

El siguiente paso es guardar estos datos en un archivo CSV, lo que permite un mayor análisis y procesamiento de datos. Usa el módulo csv integrado de Python para guardar los datos extraídos en un archivo CSV.

import csv 

# Open the CSV file once before the loop
with open('product_data.csv', mode='w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    # Write the header
    writer.writerow(['Name', 'Current Price', 'Rating',
                     'Reviews', 'Coupon', 'Link'])

    # ... existing code ...

    for product in products:
        # ... existing code ...

        # Write the data if the product is valid and not sponsored
        if name != "N/A" and "Sponsored" not in name:
            writer.writerow(
                [name, current_price, rating, reviews, coupon, link])

    # ... existing code ...

Código completo

Eche un vistazo al código completo para extraer los datos de los productos de Amazon:

import asyncio
from playwright.async_api import async_playwright
import csv

# Function to search for products on Amazon
async def amazon_shopping_search(search_query, domain="com"):
    # Replace spaces in the search query with '+'
    q = search_query.replace(" ", "+")
    # Construct the base URL for the search
    base_url = f"<https://www.amazon>.{domain}/s?k={q}"

    # Launch a headless browser
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=True,
            # Using Massive proxy to avoid IP blocking
            proxy={
                "server": "<https://network.joinmassive.com:65535>",
                "username": "YOUR_MASSIVE_USERNAME",
                "password": "YOUR_MASSIVE_PASSWORD",
            },
        )
        # Create a new page in the browser
        page = await browser.new_page()
        # Initialize the page number
        page_number = 1

        # Open the CSV file for writing
        with open("product_data.csv", mode="w", newline="", encoding="utf-8") as file:
            writer = csv.writer(file)
            # Write the header row
            writer.writerow(
                ["Name", "Current Price", "Rating", "Reviews", "Coupon", "Link"]
            )

            # Start scraping the pages
            while True:
                # Construct the URL for the current page
                url = f"{base_url}&page={page_number}"
                print(f"Scraping page {page_number}...")
                # Navigate to the current page
                await page.goto(url, wait_until="domcontentloaded")
                # Take a screenshot of the page
                await page.screenshot(path="image.png")
                # Wait for the main results container to load
                await page.wait_for_selector(".s-main-slot")

                # Get all the products on the page
                products = await page.query_selector_all(".s-result-item")

                # Iterate over each product
                for product in products:
                    # Get the name of the product
                    name = await product.query_selector("[data-cy=title-recipe]")
                    name = await name.inner_text() if name else "N/A"

                    # Get the current price of the product
                    current_price = await product.query_selector(
                        ".a-price > .a-offscreen"
                    )
                    current_price = (
                        await current_price.inner_text() if current_price else "N/A"
                    )

                    # Get the rating of the product
                    rating = await product.query_selector(
                        "[data-cy=reviews-ratings-slot]"
                    )
                    rating = await rating.inner_text() if rating else "N/A"

                    # Get the reviews of the product
                    reviews = await product.query_selector(
                        ".rush-component > div > span > a > span, a.a-link-normal > span.a-size-base"
                    )
                    reviews = await reviews.inner_text() if reviews else "N/A"

                    # Get the coupon of the product
                    coupon = await product.query_selector(".s-coupon-unclipped")
                    coupon = await coupon.inner_text() if coupon else "N/A"

                    # Get the link of the product
                    link = await product.query_selector("a.a-link-normal")
                    if link:
                        full_link = await link.get_attribute("href")
                        link = full_link.split("/ref=")[0] if full_link else "N/A"
                        link = f"<https://www.amazon>.{domain}{link}"
                    else:
                        link = "N/A"

                    # Write the product data to the CSV file
                    if name != "N/A" and "Sponsored" not in name:
                        writer.writerow(
                            [name, current_price, rating, reviews, coupon, link]
                        )

                # Check if there is a next page
                next_page = await page.query_selector(".s-pagination-next")
                if not next_page:
                    print("No more pages to scrape.")
                    break
                page_number += 1
        print("Scraping completed successfully.")
        # Close the browser
        await browser.close()

# Main function to start the scraping process
async def main():
    # Start the Amazon shopping search with the specified query and domain
    await amazon_shopping_search(search_query="office chair", domain="com")

# Run the main function
asyncio.run(main())

Función #Main para iniciar el proceso de raspado

definición asíncrona principal ():

página = esperar navegador.nuevo_page () # Inicializa el número de página page_number = 1

    # Create a new page in the browser

    # Create a new page in the browser

«servidor»:»https://network.joinmassive.com:65535«, «username»: «YOUR_MASSIVE_USERNAME», «password»: «YOUR_MASSIVE_PASSWORD»,

Uso de un proxy masivo para evitar el bloqueo de IP

Sustituir los espacios de la consulta de búsqueda por '+'

q = search_query.replace(" ", "+")
# Construct the base URL for the search
base_url = f"<https://www.amazon>.{domain}/s?k={q}"

# Launch a headless browser
async with async_playwright() as p:

importar asyncio desde playwright.async_api importar async_playwright importar csv

Una vez que el código se ejecute correctamente, guardará todos los datos del producto extraídos en un archivo CSV:

¡Bonito! Los datos son fáciles de analizar y leer.

Finalizando

En este artículo se explica cómo aprovechar los proxies masivos puede ayudarlo a extraer datos valiosos y, al mismo tiempo, minimizar el riesgo de detección y bloqueo. Para obtener una guía detallada sobre el uso de los proxies masivos, asegúrate de visitar nuestra documentación oficial.

No te olvides de explorar Masivo soluciones de representación confiables y éticas. ¡Échales un vistazo y regístrate hoy mismo!

Read More