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

Cómo raspar datos de productos de Amazon: Guía completa de mejores prácticas y herramientas

Cómo raspar datos de productos de Amazon: Guía completa de 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. Aquí tienes 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 básico para el web scraping. Asegúrate de tener instalado Python 3.8 o superior. Si no es así, visita python.org para descargar e instalar la última versión de Python.

Paso 2: Crear una carpeta de proyecto

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

Paso 3: Configurar un entorno virtual

La creación de un entorno virtual se considera la mejor práctica en el desarrollo de Python. Te permite gestionar dependencias específicas del proyecto, asegurando que no haya conflictos con otros proyectos.

Para usuarios de macOS y Linux, ejecute 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 Python necesarios

Los dos pasos principales del web scraping son recuperar el HTML y analizarlo para extraer los datos relevantes.

  • Biblioteca Requests: Una popular librería Python de terceros utilizada para realizar peticiones HTTP. Ofrece una interfaz sencilla para comunicarse con servidores web, pero devuelve HTML en forma de cadena, que no es fácil de consultar.
  • Beautiful Soup: Esta biblioteca de Python ayuda en el web scraping para extraer datos de archivos HTML y XML, permitiendo buscar elementos específicos como etiquetas, atributos o texto.

Instale estas bibliotecas utilizando el siguiente comando:

$ python3 -m pip install peticiones beautifulsoup4

Nota para usuarios de Windows: Sustituya python3 por python.

Paso 5: Configuración básica de Scraping

Crea un archivo llamado amazon.py e inserta el código para enviar una petición a una página específica de un producto 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)

Ejecutar este código podría llevar a Amazon a bloquear la petición y devolver un error 503, ya que reconoce que la petición 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 empiezan por 400 o 500. Para evitarlo, puedes imitar a un navegador enviando cabeceras personalizadas, incluido el user-agent y, a veces, accept-language.

Encuentre el agente de usuario de su navegador pulsando F12, abriendo la pestaña Red, recargando la página y examinando las cabeceras de solicitud.

He aquí un ejemplo de diccionario para cabeceras personalizadas:

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)

De este modo se obtendrá probablemente el HTML deseado con los detalles del producto. Enviar tantas cabeceras como sea posible minimiza la necesidad de renderizar JavaScript. Si es necesario, se pueden utilizar herramientas como Playwright o Selenium.

Extracción de datos de productos de Amazon

Cuando se trata de extraer información de productos de Amazon, normalmente nos encontramos con dos tipos principales de páginas que contienen los datos esenciales: la página de categoría 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 vital saber cómo navegar por ambas.

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á 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 páginas de productos individuales.

Si necesita información más detallada, como las descripciones o especificaciones de los productos, tendrá que aventurarse en las páginas de detalles de cada producto.

Profundizar en la página de detalles del producto

Al hacer clic en la URL de un producto (como https://www.amazon.com/Ro bux-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.

Inspección de elementos HTML

Haga clic con el botón derecho en el título del producto y seleccione "Inspeccionar". Encontrará resaltado el marcado HTML del título del producto. En concreto, está contenido dentro de una etiqueta span, y su atributo id está definido como "productTitle".

El mismo método puede utilizarse para encontrar el marcado de otros elementos esenciales:

  • Precio: Haga clic con el botón derecho en el precio y seleccione "Inspeccionar". El componente dólar del precio se aloja dentro de una etiqueta span con la clase "a-precio-todo", mientras que los céntimos se almacenan en otra etiqueta span, designada con la clase "a-precio-fracción".
  • Valoración, Imagen y Descripción: Utilice la misma función de inspección para localizar estos componentes esenciales, cada uno envuelto en etiquetas y clases específicas.

El proceso de extraer datos de productos de Amazon se puede dividir en pasos concretos, 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 datos deseados. A continuación, te ofrecemos una guía detallada sobre cómo proceder:

1. Iniciar la solicitud

Empiece enviando una solicitud GET con cabeceras personalizadas 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 búsqueda de información específica mediante selectores CSS. 2. Localizar y extraer el nombre del producto

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

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

3. Localizar y raspar la calificación del producto

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

rating_element = soup.select_one('#acrPopover')
rating_text = rating_element.attrs.get('title')
rating = rating_text.replace('de 5 estrellas', '')

4. Localizar y raspar el precio del producto

Extraiga 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 raspar la imagen del producto

Recupera la URL de la imagen por defecto utilizando el selector #landingImage:

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

6. Localizar y raspar la descripción del producto

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

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

7. Localizar y raspar reseñas de productos

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

Recopilación de críticas

Utilice 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:
   # Extrayendo los detalles específicos de la reseña...

Extracción de los detalles de la revisión

Cada crítica puede diseccionarse en detalles específicos:

  • Autor: span.a-nombre-perfil
  • Clasificació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 puede seleccionarse utilizando sus respectivos selectores CSS y, a continuación, extraerse utilizando métodos similares a los pasos anteriores.

Recopilación de los datos de la revisión

Crea un objeto que contiene los detalles extraídos de la reseña y lo añade 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 multifacética que requiere un enfoque preciso para dirigirse a elementos específicos dentro de la estructura de la página web. Aprovechando las capacidades de las herramientas modernas de raspado web, es posible extraer con éxito información detallada sobre los productos.

Manipulación del listado de productos

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

Identificación de enlaces de productos

En una página de categoría, puede observar que cada producto está contenido en un div con un atributo específico [data-asin]. Los enlaces a los productos individuales se encuentran a menudo dentro de una etiqueta h2 dentro de este div.

El selector CSS correspondiente para estos enlaces sería:

[data-asin] h2 a

Análisis sintáctico y seguimiento de enlaces

Puede utilizar BeautifulSoup para seleccionar estos enlaces y extraer los atributos href. Tenga en cuenta que estos enlaces pueden ser relativos, por lo que querrá utilizar el método urljoin para convertirlos en URLs absolutas.

from urllib.parse import urljoin

def parse_listing(listing_url):
    # Aquí va tu código para recuperar y analizar la página...
    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)

Paginación

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

next_page_el = soup.select_one('a:contains("Siguiente")')
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, puede utilizar esta URL para analizar la página siguiente, continuando el bucle hasta que no haya más enlaces "Siguiente".

8. Exportación de datos de productos a un archivo JSON

Los datos de los productos se recogen como diccionarios dentro de una lista. Este formato permite una fácil conversión a un Pandas DataFrame, facilitando la manipulación y exportación de los datos.

A continuación se explica cómo crear un DataFrame a partir de los datos raspados 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 contendrá toda la información del producto raspado.

Esta guía proporciona un recorrido paso a paso de los listados de productos de raspado, incluyendo la navegación a través de 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 web que se está escaneando.

Buenas 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: Utilizando 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 un sinfín de desafíos. Desde la limitación de velocidad hasta los intrincados algoritmos de detección de bots, Amazon se asegura de seguir siendo un objetivo difícil para el scraping de datos.

Desafíos en el raspado 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 única dirección IP. Superar estos límites puede provocar el bloqueo de tu IP.
  • Algoritmos de detección de bots: Existen sofisticados algoritmos que inspeccionan tus cabeceras HTTP en busca de patrones inusuales, comprobando si las peticiones proceden de bots automatizados.
  • Cambios constantes de diseño: Con varios 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

Para sortear estos obstáculos es necesario adoptar un enfoque estratégico. Estas son algunas de las mejores prácticas esenciales que se deben seguir al hacer scraping en Amazon:

  • Utilice un User-Agent realista: Hacer que su User-Agent parezca genuino es crucial para evitar la detección. Estos son los agentes de usuario más comunes que imitan la actividad real del navegador.
  • Establezca su 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 la huella digital son uniformes es vital para pasar desapercibido.
  • Altere el patrón de rastreo cuidadosamente: La elaboración de un patrón de rastreo exitoso implica simular cómo un usuario real navegaría a través de 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 inicial no lo menciona, el uso de proxies puede añadir una capa extra de anonimato. Al distribuir las solicitudes a través de varias direcciones IP, puedes evadir aún más la detección.
  • Manténgase al día con las políticas y tecnologías de Amazon: Amazon actualiza con frecuencia sus medidas de seguridad y su interfaz de usuario. Revisar y adaptar periódicamente sus métodos de scraping a estos cambios garantizará que sus 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 cambiantes de Amazon. Si adoptas estas técnicas y te mantienes alerta ante los constantes cambios, podrás acceder a los valiosos datos necesarios para tu análisis o proyecto. Recuerde que esto es sólo un vistazo superficial a lo que se requiere cuando se raspa Amazon, y la investigación y las herramientas adicionales pueden ser necesarios para lograr sus objetivos específicos.

Conclusión

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

¿Por qué elegir Amazon Scraper API?

Amazon Scraper API es una herramienta diseñada específicamente para navegar por las complejidades del scraping de Amazon. Esto es lo que puedes conseguir con esta API especializada:

  • Opciones de raspado versátiles: Puede raspar y analizar varios tipos de páginas de Amazon. Tanto si quieres extraer datos de páginas de búsqueda, de productos, de ofertas, de preguntas y respuestas, de reseñas, de los más vendidos o de vendedores, esta API te lo pone fácil.
  • Alcance mundial: Busque y recupere datos de productos localizados en la impresionante cantidad de 195 ubicaciones en 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 eficaz de datos: La API devuelve resultados analizados con precisión en un formato JSON limpio. No hay necesidad de bibliotecas adicionales o configuraciones complejas; usted recibe los datos listos para su uso inmediato.
  • Funciones mejoradas para necesidades avanzadas: Disfrute de funciones adaptadas a la eficiencia, como las capacidades de raspado masivo y los trabajos automatizados. Estas funcionalidades agilizan el proceso de scraping, permitiéndole recopilar grandes cantidades de datos con una intervención manual mínima.
  • Cumplimiento 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 las condiciones 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 a través de dos métodos distintos, cada uno de ellos dirigido a diferentes conjuntos de habilidades y requisitos. Exploremos ambas vías:

Crafting Your Own Scraper with Requests y Beautiful Soup

Si te inclinas por la codificación y posees las habilidades necesarias, crear un scraper personalizado utilizando librerías populares de Python como Requests y Beautiful Soup puede ser una aventura intrigante. He aquí un breve resumen del proceso:

Envío de cabeceras personalizadas: Mediante la personalización de los encabezados HTTP, puedes imitar las solicitudes genuinas del navegador y evadir la detección.

Rotación de User-Agents: Los cambios frecuentes en el User-Agent pueden disfrazar aún más tus actividades de scraping, haciéndolas parecer interacciones de usuario ordinarias.

Rotación de proxies: Utilizar un grupo de proxies permite distribuir las peticiones entre varias direcciones IP, lo que ayuda a eludir las prohibiciones o la limitación de velocidad.

Aunque este método ofrece flexibilidad y control, exige un esfuerzo considerable, tiempo y una supervisión continua. El diseño siempre cambiante de Amazon y las estrictas medidas anti-bot hacen que este sea un camino difícil, que requiere actualizaciones y ajustes constantes.

Solución optimizada con la API de Amazon Scraper

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

  • Funcionalidad pre-construida: La API está diseñada específicamente para Amazon, ofreciendo funciones para raspar varios tipos de páginas con facilidad.
  • Amplia cobertura: Con la capacidad de dirigir datos a numerosas ubicaciones mundiales, la API es versátil y de gran alcance.
  • Facilidad de uso: Olvídese de las complejidades de la codificación manual; la API devuelve datos listos para usar en un cómodo formato JSON.

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

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

  • Para los usuarios expertos en tecnología que disfrutan con los retos, la codificación de un rascador personalizado ofrece control y personalización.
  • Para aquellos que dan prioridad a la eficiencia, la accesibilidad y la conformidad, Amazon Scraper API proporciona una solución lista para usar que simplifica el proceso.

Ambos caminos pueden conducir a información valiosa, pero su elección tendrá un impacto significativo en el viaje. Comprender los puntos fuertes y las limitaciones de cada enfoque le ayudará a tomar la decisión que mejor se adapte a sus necesidades.

Acerca del autor
Suciu Dan, cofundador de 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.