Guía 2024 sobre raspado de datos en Amazon

Aprenda a raspar datos web Amazon usando Python así como a utilizar el Scraping Browser de Bright Data.
16 min read
How To Scrape Amazon

Ahora, usted se estará preguntando, ¿por qué enfocarse en Amazon? Como una de las mayores plataformas de comercio electrónico del mundo, Amazon sirve como una rica fuente de datos valiosos. Estos datos abarcan una amplia gama de detalles sobre productos, precios, comentarios de los clientes y tendencias emergentes. Por ejemplo, los vendedores podrían utilizar estos datos para controlar a la competencia, los investigadores podrían estudiar las tendencias del mercado y los consumidores podrían tomar decisiones de compra con conocimiento de causa. Las posibilidades son infinitas.

En este tutorial, se demostrará cómo raspar datos web de Amazon utilizando herramientas como Beautiful Soup y Playwright. Mientras realiza el proceso paso a paso, también aprenderá sobre la solución de Bright Data, que puede acelerar significativamente el proceso.

Raspado manual de Amazon con Python


Antes de empezar a extraer datos del sitio web de Amazon, debe asegurarse de que tiene todas las bibliotecas necesarias instaladas en su equipo. También es útil tener conocimientos básicos de raspado web y HTML.

Nota importante: este tutorial tiene fines puramente educativos y sirve como demostración de las capacidades técnicas. Es importante reconocer que la extracción de datos de Amazon plantea problemas relacionados con las condiciones de uso y la legalidad. El raspado web no autorizado puede acarrear graves consecuencias, incluidas acciones legales y la suspensión de la cuenta. Proceda siempre con precaución y respete las prácticas éticas.

Requisitos previos


Para continuar con el tutorial, es necesario tener Python instalado en su máquina. Si es su primer experiencia con Python, lea esta guía sobre cómo hacer raspado web con Python para obtener instrucciones detalladas. Si ya usa Python, asegúrese de que es la versión 3.7.9 o superior.

Una vez que Python esté listo, abra su terminal o shell y cree un nuevo directorio de proyecto utilizando los comandos a continuación:

mkdir scraping-amazon-python && cd scraping-amazon-python

Una vez que haya establecido el directorio del proyecto, el siguiente paso consiste en instalar un conjunto de bibliotecas adicionales que son indispensables para el raspado web eficaz. En concreto, se utilizará Requests, una biblioteca diseñada para gestionar peticiones HTTP en Python; pandas, una robusta biblioteca diseñada para la manipulación y el análisis de datos; Beautiful Soup (BS4) para analizar contenido HTML; y Playwright para automatizar tareas relacionadas con la navegación web.

Para instalar estas bibliotecas, abra la terminal o shell y ejecute los comandos a continuación:

pip3 install beautifulsoup4
pip3 install requests
pip3 install pandas
pip3 install playwright
playwright install

Asegúrese de que el proceso de instalación finaliza sin problemas antes de continuar con el siguiente paso.

Nota: El comando final (es decir, playwright install) es crucial, ya que garantiza que los binarios necesarios del navegador se instalen correctamente.

Navegue por los componentes de diseño y datos de Amazon


Tras haber instalado las bibliotecas necesarias, necesitará familiarizarse con la estructura de su sitio web. La página principal de Amazon incluye una barra de búsqueda de uso sencillo, que le permite explorar una amplia gama de productos, desde electrónicos hasta libros.

Después de ingresar el criterio de búsqueda, los resultados se muestran en formato de lista, presentando los productos con sus títulos, precios, clasificaciones y otros detalles pertinentes. Los resultados de estas búsquedas pueden ordenarse usando filtros como rango de precio, categoría de producto y reseñas del cliente:

Amazon

Si le interesa una lista de resultados más extensa, puede tomar ventaja los botones de paginación colocados en la parte infeior de la página.
Por lo común, cada página incluye numerosos listados, brindándole la oportunidad de consultar productos adicionales. Los filtros ubicados en la parte superior de la página ofrece una oportunidad de refinar su búsqueda conforme a sus requerimientos.

Para conocer la estructura HTML de Amazon, siga estos pasos:

  1. Visite el sitio web de Amazon.
  2. Escriba el producto que desee en la barra de búsqueda o seleccione una categoría de la lista de productos destacados.
  3. Abra las herramientas de desarrollo del navegador haciendo clic con el botón derecho en un producto y seleccionando Inspeccionar elemento.
  4. Explora el diseño HTML para identificar las etiquetas y atributos de los datos que pretende extraer.

Extraer productos de Amazon


Ahora que ya conoce la estructura de productos de Amazon, en esta sección recopilará detalles como el nombre del producto, su valoración, el número de valoraciones y el precio.

En el directorio de su proyecto, cree un nuevo script Python llamado amazon_scraper.py y añada el siguiente código:

import asyncio
from playwright.async_api import async_playwright
import pandas as pd
async def scrape_amazon():
    async with async_playwright() as pw:
        # Launch new browser
        browser = await pw.chromium.launch(headless=False)
        page = await browser.new_page()
        # Go to Amazon URL
        await page.goto('https://www.amazon.com/s?i=fashion&bbn=115958409011')
        # Extract information
        results = []
        listings = await page.query_selector_all('div.a-section.a-spacing-small')
        for listing in listings:
            result = {}
            # Product name
            name_element = await listing.query_selector('h2.a-size-mini > a > span')
            result['product_name'] = await name_element.inner_text() if name_element else 'N/A'
            
            # Rating
            rating_element = await listing.query_selector('span[aria-label*="out of 5 stars"] > span.a-size-base')
            result['rating'] = (await rating_element.inner_text())[0:3]await rating_element.inner_text() if rating_element else 'N/A'
            
            # Number of reviews
            reviews_element = await listing.query_selector('span[aria-label*="stars"] + span > a > span')
            result['number_of_reviews'] = await reviews_element.inner_text() if reviews_element else 'N/A'
            
            # Price
            price_element = await listing.query_selector('span.a-price > span.a-offscreen')
            result['price'] = await price_element.inner_text() if price_element else 'N/A'
            if(result['product_name']=='N/A' and result['rating']=='N/A' and result['number_of_reviews']=='N/A' and result['price']=='N/A'):
                pass
            else:
                results.append(result)
        # Close browser
        await browser.close()
        
        return results
# Run the scraper and save results to a CSV file
results = asyncio.run(scrape_amazon())
df = pd.DataFrame(results)
df.to_csv('amazon_products_listings.csv', index=False)

En este código, se utiliza las capacidades asíncronas de Python con la biblioteca Playwright para raspar datos web listados de productos de una página específica de moda de Amazon. Una vez que inicie una nueva instancia del navegador y navegue hasta la URL de Amazon de destino, extraerá información sobre el producto, como el nombre, la puntuación, el número de opiniones y el precio. Después de iterar sobre cada anuncio de la página, se filtran los anuncios que no tienen datos (es decir, se marcan como “N/A”). Los resultados se guardan en un Pandas DataFrame y se exportan a un archivo CSV llamado amazon_products_listings.csv.

Para ejecutar el script, ejecute python3 amazon_scraper.py en su terminal o shell. El resultado debería ser el siguiente:

product_name,rating,number_of_reviews,price
Crocs Women's Kadee Ii Sandals,4.2,17.5K+,$29.99
Teva Women's W Flatform Universal Sandal,4.7,7K+,$58.80
"OOFOS OOriginal Sport Sandal - Lightweight Recovery Footwear - Reduces Stress on Feet, Joints & Back - Machine Washable - Hand-Painted Graphics",4.5,9.4K+,N/A
"Crocs Women's Brooklyn Low Wedges, Platform Sandals",4.6,11.7K+,N/A
Teva Women's Original Universal Sandal,4.7,18.7K+,$35.37
Reef Women's Water Vista Sandal,4.5,1.9K+,$59.95
Crocs Women's Brooklyn Platform Slides Sandal,4.2,376,N/A
…output omitted…

Nota: Si el script no funciona la primera vez que lo ejecuta, intente ejecutarlo de nuevo. Amazon cuenta con sofisticadas medidas anti-raspado web que pueden impedir o bloquear sus intentos de raspado web de datos.

Técnicas avanzadas de raspado web para Amazon


Cuando comience su viaje de raspado web con Amazon, descubrirá rápidamente que este gigante del comercio electrónico, conocido por sus complejas e intrincadas páginas web, plantea desafíos que requieren algo más que métodos básicos de raspado web. Eche un vistazo a algunas técnicas avanzadas que pueden ayudarle a garantizar una experiencia de raspado web fluida y eficaz:

Manejar la paginación


Amazon muestra múltiples productos, que a menudo abarcan varias páginas. Para capturar todos los datos, el script debe ser capaz de navegar por estas páginas sin problemas. Un método común es dirigirse al botón Siguiente situado en la parte inferior de los listados de productos. Al identificar su selector único, puede programar su secuencia de comandos para que haga click en este botón y le lleve a la página siguiente. Sin embargo, asegúrese de que su raspador web espera a que se carguen todos los elementos antes de continuar.

Evitar los anuncios


A menudo aparecen anuncios en los listados de productos de Amazon. Estos anuncios pueden tener una estructura ligeramente diferente en comparación con los productos normales, lo que puede causar problemas en el proceso de raspado. Para solucionarlo, debe detectar elementos o etiquetas que indiquen que se trata de un anuncio. Por ejemplo, busque etiquetas como Sponsored o Ad. Una vez detectadas, puede ordenar a su script que omita estas entradas, asegurándose de que sólo recopila datos de productos auténticos.

Mitigar el bloqueo


Amazon, vigilante de su contenido, puede bloquear o suspender temporalmente actividades que considere robóticas o sospechosas. Es crucial hacer que su raspador web parezca lo más humano posible.

Para evitar bloqueos, es necesario introducir demoras o intervalos aleatorios entre peticiones usando funciones como asyncio.sleep(random.uniform(1, 5)). Esto hace que su patrón de raspado web parezca menos robótico. Además, considera la posibilidad de rotar los agentes de usuario y las direcciones IP para reducir el riesgo de detección. El empleo de servicios de resolución de CAPTCHA también puede ser beneficioso si se enfrenta a desafíos CAPTCHA.

Manejar el contenido de forma dinámica


Algunos de los contenidos de Amazon, como las reseñas o las secciones de preguntas y respuestas, se cargan dinámicamente, y un raspador web básico podría pasar por alto estos datos. Debe asegurarse de que su raspador web puede ejecutar JavaScript y esperar a que se cargue el contenido dinámico. Con herramientas como Playwright o Selenium, puede utilizar esperas explícitas, asegurándose de que elementos específicos se cargan antes de que el raspador web proceda.

Establezca un límite de raspado


Desgraciadamente, enviar muchas solicitudes simultáneas puede dar lugar a la inclusión de una IP en una lista negra. Para evitar que esto ocurra, es necesario limitar la velocidad a la que se envían las solicitudes.

Diseñe su script de forma que no bombardee los servidores de Amazon. Es esencial establecer una demora razonable entre las solicitudes, como se mencionó anteriormente.

Mediante la aplicación de estas técnicas avanzadas, no sólo mejorará la eficiencia de sus esfuerzos de raspado web en Amazon, sino que también garantizará la longevidad, reduciendo las posibilidades de que su raspador web sea detectado o bloqueado.

Considere el uso de Bright Data para raspar Amazon


Aunque el raspado web manual puede dar resultados para tareas más pequeñas, puede ser tedioso y menos eficiente cuando se amplía. Para un enfoque más racionalizado de la recopilación de grandes cantidades de datos de Amazon, considere el uso de Bright Data.

Con Scraping Browser de Bright Data, puede interactuar con sitios dinámicos como Amazon sin problemas, ya que navega hábilmente a través de JavaScript, solicitudes AJAX y otras complejidades. O si tiene prisa por obtener datos estructurados de Amazon, ya sean listados de productos, reseñas o perfiles de vendedores, puede aprovechar inmediatamente su conjunto de datos de Amazon, que le permite descargar y acceder a datos curados directamente desde su plataforma.

Crear una cuenta de Bright Data


Para empezar a utilizar Bright Data, debe crear y configurar su cuenta. Para ello, siga estos pasos:

Abra su navegador y vaya al sitio web de Bright Data. Haga clic en Iniciar prueba gratuita y siga las instrucciones.

Una vez dentro de su panel de control, busque el icono de la tarjeta de crédito en la barra lateral izquierda para acceder a la página de Facturación. Aquí, introduzca un método de pago válido para activar su cuenta:

Página de facturación.

A continuación, diríjase a la sección Proxies e Infraestructura de Raspado web seleccionando su icono correspondiente. Seleccione Scraping Browser > Empezar:

Scraping Browser

Asigne el nombre correspondiente a su solución y confirme con el botón Añadir:

En Parámetros de acceso, tómese un minuto para anotar su nombre de usuario, host (por defecto) y contraseña. Los necesitará más adelante:

Una vez que haya completado estos pasos, estará listo para extraer los datos.

Extraer los datos de los productos de Amazon utilizando el Scraping Browser


Para empezar a extraer datos de productos de Amazon mediante Bright Data, cree un nuevo archivo llamado amazon_scraper_bdata.py y añada el siguiente código:

import asyncio
from playwright.async_api import async_playwright
import pandas as pd
username='YOUR_BRIGHTDATA_USERNAME'
password='YOUR_BRIGHTDATA_PASSWORD'
auth=f'{username}:{password}'
host = 'YOUR_BRIGHTDATA_DEFAULT_HOST'
browser_url = f'wss://{auth}@{host}'
async def scrape_amazon_bdata():
    async with async_playwright() as pw:
        print('connecting')
        # Launch new browser
        browser = await pw.chromium.connect_over_cdp(browser_url)
        print('connected')
        page = await browser.new_page()
        print('navigating')
        # Go to Amazon URL
        await page.goto('https://www.amazon.com/s?i=fashion&bbn=115958409011', timeout=600000)
        print('data extraction in progress')
        # Extract information
        results = []
        listings = await page.query_selector_all('div.a-section.a-spacing-small')
        for listing in listings:
            result = {}
            # Product name
            name_element = await listing.query_selector('h2.a-size-mini > a > span')
            result['product_name'] = await name_element.inner_text() if name_element else 'N/A'
            
            # Rating
            rating_element = await listing.query_selector('span[aria-label*="out of 5 stars"] > span.a-size-base')
            result['rating'] = (await rating_element.inner_text())[0:3]await rating_element.inner_text() if rating_element else 'N/A'
            
            # Number of reviews
            reviews_element = await listing.query_selector('span[aria-label*="stars"] + span > a > span')
            result['number_of_reviews'] = await reviews_element.inner_text() if reviews_element else 'N/A'
            
            # Price
            price_element = await listing.query_selector('span.a-price > span.a-offscreen')
            result['price'] = await price_element.inner_text() if price_element else 'N/A'
            if(result['product_name']=='N/A' and result['rating']=='N/A' and result['number_of_reviews']=='N/A' and result['price']=='N/A'):
                pass
            else:
                results.append(result)
        # Close browser
        await browser.close()
        
        return results
# Run the scraper and save results to a CSV file
results = asyncio.run(scrape_amazon_bdata())
df = pd.DataFrame(results)
df.to_csv('amazon_products_bdata_listings.csv', index=False)

En este código, está utilizando la biblioteca Playwright en combinación con asyncio para extraer de forma asíncrona detalles de productos de una página web de Amazon. Ha configurado los detalles de autenticación para Bright Data, un servicio proxy, y luego se conecta a un navegador utilizando este servicio.

Una vez conectado, el script navega a la URL de Amazon especificada, extrae la información del producto, como el nombre, la calificación, el número de reseñas y el precio, y luego compila estos detalles en una lista. Si un producto concreto no tiene ninguno de los datos mencionados, se omite.

Una vez se haya finalizado el raspado de datos, el navegador se cierra y los detalles de producto extraídos se guardan en un archivo CSV llamado amazon_products_bdata_listings.csv.

Importante: recuerde sustituir YOUR_BRIGHTDATA_USERNAME, YOUR_BRIGHTDATA_PASSWORD, and YOUR_BRIGHTDATA_HOST con sus detalles de Bright Data zoneaccount (ubicados en la pestaña “Parámetros de Acceso”).

Ejecute el código desde su terminal o shell utilizando el siguiente comando:

python3 amazon_scraper_bdata.py

El resultado debería ser el siguiente:

product_name,rating,number_of_reviews,price
Women's Square Neck Bodice Dress Sleeveless Tank Top Stretch Flare Mini Dresses,N/A,131,$32.99
"Women's Swiftwater Sandal, Lightweight and Sporty Sandals for Women",N/A,"35,941",$19.95
Women's Elegant Sleeveless Off Shoulder Bodycon Long Formal Party Evening Dress,N/A,"3,122",$49.99
Women 2023 Summer Sleeveless Tank Dresses Crew Neck Slim Fit Short Casual Ruched Bodycon Party Club Mini Dress,N/A,"40,245",$33.99
"Infinity Dress with Bandeau, Convertible Bridesmaid Dress, Long, Plus Size, Multi-Way Dress, Twist Wrap Dress",N/A,"11,412",$49.99
…output omitted…

Aunque el raspado web manual de Amazon puede encontrar problemas, como CAPTCHAs y restricciones de acceso, Scraping Browser de Bright Data proporciona la capacidad de recuperación y la flexibilidad para hacer frente a estos desafíos, asegurando la extracción ininterrumpida de datos.

Conjunto de datos Bright Data Amazon


Si no desea raspar datos manualmente, Bright Data también ofrece conjuntos de datos de Amazon ya preparados. En estos conjuntos de datos, encontrará de todo, desde detalles de productos hasta reseñas de usuarios. Utilizar estos conjuntos de datos significa que no tiene que raspar sitios web usted mismo y los datos ya están organizados para usted.

Para encontrar estos conjuntos de datos, vaya al Panel de Control de Bright Data y haga clic en Datasets & Web scraper IDE a la izquierda. A continuación, haga clic en Obtener datos del Mercado de conjuntos de datos:

A continuación, busque “amazon” en la barra de búsqueda. A continuación, haga clic en Ver conjunto de datos:

Elija el conjunto de datos que se ajuste a sus necesidades. Puede utilizar filtros para limitar sus opciones. Recuerde que el costo depende de la cantidad de datos que quiera, así que puede elegir en función de lo que necesite y de su presupuesto:

Puede encontrar el código que se utiliza en este tutorial en el siguiente repositorio de GitHub.

Conclusión


En este tutorial, mostramos cómo recopilar datos de Amazon manualmente usando Python, que viene con sus desafíos justos como CAPTCHAs y limitación de velocidad que podrían obstaculizar el raspado de datos eficiente. Sin embargo, el aprovechamiento de las herramientas de Bright Data y su Scraping Browser pueden agilizar el proceso y mitigar estos asuntos.

Bright Data proporciona herramientas que simplifican la recopilación de datos de sitios web, incluido Amazon. Estas herramientas convierten las difíciles tareas de raspado web en tareas sencillas, ahorrándole tiempo y energía.

Además, Bright Data ofrece conjuntos de datos listos para usar, específicamente para Amazon. Esto significa que no tiene que empezar desde cero; puede acceder directamente a grandes cantidades de datos de Amazon.

Al utilizar las herramientas de Bright Data, la recopilación de datos se convierte en un juego de niños, lo que abre las puertas a nuevas perspectivas y conocimientos. Sumérjase y descubra nuevas posibilidades de datos con Bright Data.