Volver al blog
Guías
Suciu Dan10 de agosto de 202316 minutos de lectura

Cómo extraer datos de productos de Amazon: una guía completa sobre las mejores prácticas y herramientas

Cómo extraer datos de productos de Amazon: una guía completa sobre las mejores prácticas y herramientas

Preparación para el scraping de Amazon

El scraping de Amazon es una tarea compleja que requiere un conjunto de herramientas y un enfoque estratégico. A continuación, te ofrecemos una guía paso a paso para preparar tu sistema para el scraping de datos de productos de Amazon.

Paso 1: Instalar Python

Python es el lenguaje de programación principal para el web scraping. Asegúrate de tener instalado Python 3.8 o una versión superior. Si no es así, dirígete a python.org para descargar e instalar la última versión de Python.

Paso 2: Crea una carpeta de proyecto

Crea una carpeta específica para almacenar tus archivos de código para el scraping web de Amazon. Organizar tus archivos hará que tu flujo de trabajo sea más fluido.

Paso 3: Configurar un entorno virtual

Crear un entorno virtual se considera una buena práctica en el desarrollo con Python. Te permite gestionar las dependencias específicas del proyecto, asegurando que no haya conflictos con otros proyectos.

Para los usuarios de macOS y Linux, ejecuta los siguientes comandos para crear y activar un entorno virtual:

$ python3 -m venv .env
$ source .env/bin/activate

Para los usuarios de Windows, los comandos son ligeramente diferentes:

c:\amazon>python -m venv .env
c:\amazon>.env\scripts\activate

Paso 4: Instalar los paquetes de Python necesarios

Dos pasos fundamentales en el web scraping son recuperar el HTML y analizarlo para extraer los datos relevantes.

  • Biblioteca Requests: una popular biblioteca de Python de terceros utilizada para realizar solicitudes HTTP. Ofrece una interfaz sencilla para comunicarse con servidores web, pero devuelve el HTML como una cadena, lo que no facilita la consulta.
  • Beautiful Soup: esta biblioteca de Python ayuda en el web scraping a extraer datos de archivos HTML y XML, permitiendo buscar elementos específicos como etiquetas, atributos o texto.

Instala estas bibliotecas con el siguiente comando:

$ python3 -m pip install requests beautifulsoup4

Nota para usuarios de Windows: Sustituye python3 por python.

Paso 5: Configuración básica del scraping

Crea un archivo llamado amazon.py e inserta el código para enviar una solicitud a una página de producto específica de Amazon. Por ejemplo:

import requests
url = 'https://www.amazon.com/Robux-Roblox-Online-Game-Code/dp/B07RZ74VLR/'
response = requests.get(url)
print(response.text)

La ejecución de este código podría provocar que Amazon bloquee la solicitud y devuelva un error 503, ya que reconoce que la solicitud no se ha realizado a través de un navegador.

Paso 6: Superar los mecanismos de bloqueo

Amazon suele bloquear los intentos de scraping, devolviendo códigos de error que comienzan por 400 o 500. Para superar esto, puedes imitar a un navegador enviando encabezados personalizados, incluyendo el user-agent y, en ocasiones, el accept-language.

Encuentra el user-agent de tu navegador pulsando F12, abriendo la pestaña Red, recargando la página y examinando los encabezados de solicitud.

Aquí tienes un ejemplo de diccionario para encabezados personalizados:

custom_headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/602.18 (KHTML, like Gecko) Chrome/54.0.3129.163 Safari/602.6 Edge/9.50428',
    'accept-language': 'en-US,en;q=0.9',
}

Envía este diccionario utilizando el método get de la siguiente manera:

response = requests.get(url, headers=custom_headers)

Probablemente esto generará el HTML deseado con los detalles del producto. Enviar tantos encabezados como sea posible minimiza la necesidad de renderización con JavaScript. Si la renderización es necesaria, se pueden utilizar herramientas como Playwright o Selenium.

Extracción de datos de productos de Amazon

A la hora de extraer información de productos de Amazon, normalmente se encuentran dos tipos principales de páginas que contienen los datos esenciales: la página de categorías y la página de detalles del producto. Cada una de ellas desempeña un papel crucial a la hora de extraer la información necesaria, y es fundamental saber cómo navegar por ambas.

La página de categorías

Tomemos, por ejemplo, la URL https://www.amazon.com/s?i=specialty-aps&bbn=16225007011&rh=n%3A16225007011%2Cn%3A193870011

En la página de categorías, encontrarás lo básico:

  • Título del producto: El nombre del producto.
  • Imagen del producto: representación visual del artículo.
  • Valoración del producto: valoraciones y comentarios de los usuarios.
  • Precio del producto: El precio de venta actual.
  • Página de URL de productos: enlaces a las páginas de productos individuales.

Si necesitas información más detallada, como las descripciones o las especificaciones del producto, tendrás que acceder a las páginas de detalles de cada producto.

Explorar la página de detalles del producto

Al hacer clic en la URL de un producto (como https://www.amazon.com/Robux-Roblox-Online-Game-Code/dp/B07RZ74VLR/), accederás a un tesoro de información detallada. Para ver cómo está estructurada esta información, puedes utilizar un navegador moderno como Chrome.

Inspeccionar elementos HTML

Haz clic con el botón derecho del ratón en el título del producto y selecciona «Inspeccionar». Verás resaltado el código HTML del título del producto. En concreto, está contenido dentro de una etiqueta span, y su atributo id se define como «productTitle».

Se puede utilizar el mismo método para encontrar el marcado de otros elementos esenciales:

  • Precio: Haz clic con el botón derecho del ratón en el precio y selecciona «Inspeccionar». La parte del precio en dólares se encuentra dentro de una etiqueta span con la clase «a-price-whole», mientras que los céntimos se almacenan en otra etiqueta span, designada con la clase «a-price-fraction».
  • Valoración, imagen y descripción: utilice la misma función de inspección para localizar estos componentes esenciales, cada uno de ellos envuelto en etiquetas y clases específicas.

El proceso de extraer datos de productos de Amazon se puede dividir en pasos específicos, cada uno de los cuales se centra en un aspecto concreto de la información del producto. Mediante el uso de bibliotecas de Python como requests y BeautifulSoup, podemos acceder, localizar y extraer los detalles deseados. A continuación, se ofrece una guía detallada sobre cómo proceder:

1. Iniciar la solicitud

Empieza enviando una solicitud GET con encabezados personalizados a la URL de la página del producto:

response = requests.get(url, headers=custom_headers)
soup = BeautifulSoup(response.text, 'lxml')

Utilizamos BeautifulSoup para analizar el contenido HTML, lo que facilita la consulta de información específica mediante selectores CSS. 2. Localizar y extraer el nombre del producto

Identifica el título del producto utilizando el identificador único productTitle dentro de un elemento span:

title_element = soup.select_one('#productTitle')
title = title_element.text.strip()

3. Localizar y extraer la valoración del producto

Para extraer la valoración del producto, debes acceder al atributo title del selector #acrPopover:

rating_element = soup.select_one('#acrPopover')
rating_text = rating_element.attrs.get('title')
rating = rating_text.replace('out of 5 stars', '')

4. Localizar y extraer el precio del producto

Extrae el precio del producto utilizando el selector #price_inside_buybox:

price_element = soup.select_one('#price_inside_buybox')
print(price_element.text)

5. Localizar y extraer la imagen del producto

Recupera la URL de la imagen predeterminada utilizando el selector #landingImage:

image_element = soup.select_one('#landingImage')
image = image_element.attrs.get('src')

6. Localizar y extraer la descripción del producto

Recupera la descripción del producto utilizando el selector #productDescription:

description_element = soup.select_one('#productDescription')
print(description_element.text)

7. Localizar y extraer las reseñas del producto

Extraer reseñas es más complejo, ya que un producto puede tener varias reseñas. Una sola reseña puede contener diversa información, como el autor, la valoración, el título, el contenido, la fecha y el estado de verificación.

Recopilación de reseñas

Utiliza el selector div.review para identificar y recopilar todas las reseñas:

review_elements = soup.select("div.review")
scraped_reviews = []

for review in review_elements:
   # Extracting specific review details...

Extraer los detalles de las reseñas

Cada reseña se puede desglosar en detalles específicos:

  • Autor: span.a-profile-name
  • Valoración: i.review-rating
  • Título: a.review-title > span:not([class])
  • Contenido: span.review-text
  • Fecha: span.review-date
  • Estado verificado: span.a-size-mini

Cada uno de estos elementos se puede seleccionar utilizando sus respectivos selectores CSS y, a continuación, extraer mediante métodos similares a los pasos anteriores.

Recopilación de los datos de la reseña

Crea un objeto que contenga los detalles de la reseña extraídos y añádelo a la matriz de reseñas:

r = {
       "author": r_author,
       "rating": r_rating,
       "title": r_title,
       "content": r_content,
       "date": r_date,
       "verified": r_verified
}

scraped_reviews.append(r)

El scraping de datos de productos de Amazon es una tarea compleja que requiere un enfoque preciso para identificar elementos específicos dentro de la estructura de la página web. Aprovechando las capacidades de las herramientas modernas de scraping web, es posible extraer con éxito información detallada sobre los productos.

Manejo de listados de productos

Para extraer información detallada de los productos, a menudo se parte de una página de listado de productos o de una página de categorías, donde los productos se muestran en una vista de cuadrícula o de lista.

Identificación de enlaces de productos

En una página de categorías, es posible que observes que cada producto está contenido dentro de un div con un atributo específico [data-asin]. Los enlaces a productos individuales suelen encontrarse dentro de una etiqueta h2 dentro de este div.

El selector CSS correspondiente para estos enlaces sería:

[data-asin] h2 a

Análisis y seguimiento de enlaces

Puedes utilizar BeautifulSoup para seleccionar estos enlaces y extraer los atributos href. Ten en cuenta que estos enlaces pueden ser relativos, por lo que te conviene utilizar el método urljoin para convertirlos en URL absolutas.

from urllib.parse import urljoin

def parse_listing(listing_url):
    # Your code to fetch and parse the page goes here...
    link_elements = soup_search.select("[data-asin] h2 a")
    page_data = []
    for link in link_elements:
        full_url = urljoin(listing_url, link.attrs.get("href"))
        product_info = get_product_info(full_url)
        page_data.append(product_info)

Gestión de la paginación

Muchas páginas de listados están paginadas. Puedes navegar a la página siguiente localizando el enlace que contiene el texto «Siguiente».

next_page_el = soup.select_one('a:contains("Next")')
if next_page_el:
    next_page_url = next_page_el.attrs.get('href')
    next_page_url = urljoin(listing_url, next_page_url)

A continuación, puedes utilizar esta URL para analizar la página siguiente, continuando el bucle hasta que no haya más enlaces «Siguiente».

8. Exportar los datos de productos extraídos a un archivo JSON

Los datos de productos extraídos se recopilan como diccionarios dentro de una lista. Este formato permite una fácil conversión a un DataFrame de Pandas, lo que facilita la manipulación y exportación de datos.

A continuación se explica cómo crear un DataFrame a partir de los datos extraídos y guardarlo como un archivo JSON:

import pandas as pd

df = pd.DataFrame(page_data)
df.to_json('baby.json', orient='records')

Esto creará un archivo JSON que contiene toda la información de los productos extraídos.

Esta guía ofrece un tutorial paso a paso sobre cómo extraer listados de productos, incluyendo la navegación por la paginación y la exportación de los resultados a un archivo JSON. Es esencial adaptar estos métodos a la estructura y los requisitos específicos del sitio del que se están extrayendo los datos.

Mejores prácticas y técnicas

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import pandas as pd

custom_headers = {
    "accept-language": "en-US,en;q=0.9",
    "user-agent": "{user-agent}",
}

def get_response(url):
    """Make a GET request and return the response if successful."""
    with requests.Session() as session:
        session.headers.update(custom_headers)
        response = session.get(url)
        if response.status_code != 200:
            print(f"Error in getting webpage {url}")
            return None
        return response

def get_product_info(url):
    """Scrape product details from the given URL."""
    response = get_response(url)
    if response is None:
        return None

    # ... rest of the code ...

    return {
        "title": title,
        "price": price,
        "rating": rating,
        "image": image,
        "description": description,
        "url": url,
        "reviews": scraped_reviews,
    }

def parse_listing(listing_url):
    """Parse multiple product listings from the given URL."""
    page_data = []
    while listing_url:
        response = get_response(listing_url)
        if response is None:
            break

        soup_search = BeautifulSoup(response.text, "lxml")
        link_elements = soup_search.select("[data-asin] h2 a")

        for link in link_elements:
            full_url = urljoin(listing_url, link.attrs.get("href"))
            print(f"Scraping product from {full_url[:100]}", flush=True)
            product_info = get_product_info(full_url)
            if product_info:
                page_data.append(product_info)

        next_page_el = soup_search.select_one('a:contains("Next")')
        listing_url = urljoin(listing_url, next_page_el.attrs.get('href')) if next_page_el else None
        print(f'Scraping next page: {listing_url}', flush=True) if listing_url else None

    return page_data

def main():
    search_url = "{category url}"
    data = parse_listing(search_url)
    df = pd.DataFrame(data)
    df.to_json("amz.json", orient='records')

if __name__ == '__main__':
    main()

Una forma sencilla de extraer datos de Amazon: utilizar la API de Amazon Scraper

Extraer datos de Amazon no es tan sencillo como podría parecer. Con la creciente complejidad de la seguridad web, extraer información valiosa de esta colosal plataforma de comercio electrónico presenta una miríada de retos. Desde la limitación de velocidad hasta intrincados algoritmos de detección de bots, Amazon se asegura de seguir siendo un objetivo difícil para la extracción de datos.

Retos del scraping de datos de Amazon

  • Limitación de velocidad: Amazon aplica medidas de limitación de velocidad para controlar el número de solicitudes procedentes de una misma dirección IP. Superar estos límites puede provocar que se bloquee tu IP.
  • Algoritmos de detección de bots: Se utilizan algoritmos sofisticados para inspeccionar los encabezados HTTP en busca de patrones inusuales, comprobando si las solicitudes provienen de bots automatizados.
  • Diseños en constante cambio: Con diversos diseños de página y estructuras HTML fluctuantes, mantenerse al día con la interfaz en constante cambio requiere vigilancia y adaptabilidad.

Estrategias para superar los retos

Superar estos obstáculos requiere un enfoque estratégico. A continuación, se indican algunas prácticas recomendadas esenciales que debes seguir al extraer datos de Amazon:

  • Utiliza un User-Agent realista: Hacer que tu User-Agent parezca auténtico es crucial para eludir la detección. Estos son los User-Agents más habituales que imitan la actividad real de un navegador.
  • Establece tu huella digital de forma coherente: Muchas plataformas, incluida Amazon, utilizan el Protocolo de Control de Transmisión (TCP) y la huella digital IP para identificar bots. Asegurarse de que los parámetros de tu huella digital se mantengan uniformes es vital para pasar desapercibido.
  • Modifica el patrón de rastreo con cuidado: Crear un patrón de rastreo eficaz implica simular cómo un usuario real navegaría por una página web. Esto incluye incorporar clics, desplazamientos y movimientos del ratón que imiten el comportamiento humano. Diseñar un patrón que refleje la interacción humana puede reducir la probabilidad de detección.
  • Considera la gestión de proxies: Aunque el artículo original no lo menciona, el uso de proxies puede añadir una capa adicional de anonimato. Al distribuir las solicitudes entre varias direcciones IP, puedes evadir aún más la detección.
  • Mantente al día de las políticas y tecnologías de Amazon: Amazon actualiza con frecuencia sus medidas de seguridad y su interfaz de usuario. Revisar periódicamente y adaptar tus métodos de scraping a estos cambios garantizará que tus técnicas sigan siendo eficaces.

La tarea de extraer datos de productos de Amazon es compleja y exige un conocimiento profundo de las mejores prácticas y una adaptación constante a las estrategias en constante evolución de Amazon. Al adoptar estas técnicas y permanecer atento al panorama en constante cambio, podrá acceder a los valiosos datos necesarios para su análisis o proyecto. Recuerde que esto es solo un breve resumen de lo que se requiere para extraer datos de Amazon, y es posible que necesite investigación y herramientas adicionales para alcanzar sus objetivos específicos.

Conclusión

Aunque los métodos de scraping manual detallados anteriormente pueden sin duda aportar información valiosa, requieren una supervisión continua, adaptación y conocimientos técnicos. Para aquellos que buscan un enfoque más ágil y fácil de usar, la API de Amazon Scraper ofrece una solución eficiente y específica.

¿Por qué elegir la API de Amazon Scraper?

La API de Amazon Scraper es una herramienta creada específicamente para lidiar con las complejidades del scraping de Amazon. Esto es lo que puedes conseguir con esta API especializada:

  • Opciones de scraping versátiles: puede extraer y analizar datos de diversos tipos de páginas de Amazon. Tanto si desea extraer datos de las páginas de Búsqueda, Productos, Listado de ofertas, Preguntas y respuestas, Reseñas, Más vendidos o Vendedores, esta API le ofrece todo lo que necesita.
  • Alcance global: dirígete a datos de productos localizados y recómelos en nada menos que 195 ubicaciones de todo el mundo. Esta amplia cobertura permite realizar análisis sólidos y obtener información sobre diferentes mercados y datos demográficos.
  • Recuperación eficiente de datos: La API devuelve resultados analizados precisos en un formato JSON limpio. No hay necesidad de bibliotecas adicionales ni configuraciones complejas; recibes los datos listos para su uso inmediato.
  • Funciones mejoradas para necesidades avanzadas: Disfruta de funciones diseñadas para la eficiencia, como la capacidad de scraping masivo y los trabajos automatizados. Estas funcionalidades agilizan el proceso de scraping, permitiéndote recopilar grandes cantidades de datos con una intervención manual mínima.
  • Cumplimiento normativo y facilidad de uso: A diferencia del scraping manual, el uso de una API dedicada como Amazon Scraper API suele garantizar un mejor cumplimiento de la normativa legal y de los términos de servicio de Amazon, lo que la convierte en una opción más segura para la extracción de datos.

Preguntas frecuentes

La extracción de datos de productos de Amazon puede abordarse mediante dos métodos distintos, cada uno de los cuales se adapta a diferentes conjuntos de habilidades y requisitos. Exploremos ambas vías:

Crear tu propio scraper con Requests y Beautiful Soup

Si te inclinas por la programación y posees las habilidades necesarias, crear un scraper personalizado utilizando bibliotecas populares de Python como Requests y Beautiful Soup puede ser una aventura interesante. A continuación, te ofrecemos una breve descripción del proceso:

Envío de encabezados personalizados: al personalizar los encabezados HTTP, puedes imitar las solicitudes genuinas de un navegador y evitar la detección.

Rotación de User-Agents: Los cambios frecuentes en el User-Agent pueden disimular aún más tus actividades de scraping, haciendo que parezcan interacciones de usuarios normales.

Rotación de proxies: el uso de un conjunto de proxies te permite distribuir las solicitudes entre varias direcciones IP, lo que ayuda a eludir los bloqueos o las limitaciones de velocidad.

Aunque este método ofrece flexibilidad y control, exige un esfuerzo y un tiempo considerables, además de una supervisión continua. El diseño en constante cambio de Amazon y sus estrictas medidas antibots hacen que este sea un camino difícil, que requiere actualizaciones constantes y ajustes precisos.

Solución optimizada con Amazon Scraper API

Para aquellos que buscan una alternativa más fácil de usar y que ahorre tiempo, la API de Amazon Scraper ofrece una solución a medida:

  • Funcionalidad preintegrada: La API está diseñada específicamente para Amazon y ofrece funciones para extraer datos de diversos tipos de páginas con facilidad.
  • Cobertura integral: con la capacidad de recopilar datos en numerosas ubicaciones globales, la API es versátil y de gran alcance.
  • Facilidad de uso: olvídate de las complejidades de la programación manual; la API devuelve datos listos para usar en un cómodo formato JSON.

La API de Amazon Scraper representa un punto de entrada accesible al scraping de datos de Amazon, especialmente para personas u organizaciones que carecen de los recursos técnicos o del tiempo necesarios para desarrollar y mantener un scraper personalizado.

Tanto si decide escribir su propio código con Requests y Beautiful Soup como si opta por la API especializada Amazon Scraper, su decisión debe ajustarse a sus habilidades, recursos y objetivos, así como al cumplimiento de las directrices legales y éticas.

  • Para los usuarios con conocimientos técnicos que disfrutan de los retos, programar un scraper personalizado ofrece control y personalización.
  • Para aquellos que priorizan la eficiencia, la accesibilidad y el cumplimiento normativo, la API de Amazon Scraper ofrece una solución lista para usar que simplifica el proceso.

Ambas vías pueden conducir a información valiosa, pero su elección influirá significativamente en el proceso. Comprender las ventajas y limitaciones de cada enfoque le ayudará a tomar una decisión informada que se adapte mejor a sus necesidades.

Acerca del autor
Suciu Dan, Cofundador @ WebScrapingAPI
Suciu DanCofundador

Suciu Dan es cofundador de WebScrapingAPI y escribe guías prácticas dirigidas a desarrolladores sobre el scraping web con Python, el scraping web con Ruby y las infraestructuras de proxy.

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.