🛒 SCRIPT PRODUCTOS AMAZON NO-RT 🛒


Amazon-Haul_-La-Nueva-Competencia-de-Compras-Online-750x375.jpg


Hoy os traigo un hilo que os va a volar la cabeza 🤯. Os voy a enseñar cómo con Python y un poco de cerebro (si tienes, claro), puedes hacer un scraping de productos de Amazon y sacar nombres, precios, enlaces... todo como un auténtico cerdo trufero 🐗

¿Estás listo o vuelves a la cueva?



🔪 ¿Qué hace este código?

Te pide que le digas qué quieres buscar, rollo "velas aromáticas" o "sables láser de dos euros". Luego, se pone a trabajar como si le debiera dinero a Hacienda: busca productos en Amazon, extrae los datos y los guarda en un .txt para que tú, máquina, lo tengas todo mascadito.



 
Última edición por un moderador:

Neeoozz

Me follo a tu madre y me voy sin pagar
Noderador
Nodero
Noder
SE VIENE HILO UN LARGO.
El código adjunto puede que de algún error en algún momento, pero como muchos yo estoy aprendiendo así que os jodéis, que no he visto a nadie subir algo así y me ha llevado un buen rato hacerlo todo.

Hoy os traigo un hilo que os va a volar la cabeza 🤯. Os voy a enseñar cómo con Python y un poco de cerebro (si tienes, claro), puedes hacer un scraping de productos de Amazon y sacar nombres, precios, enlaces... todo como un auténtico cerdo trufero 🐗. ¿Estás listo o vuelves a la cueva? Vamos al lío:




🔪 ¿Qué hace este código?
Te pide que le digas qué quieres buscar, rollo "bragas de abuela", "velas aromáticas" o "sables láser de dos euros". Luego, se pone a trabajar como si le debiera dinero a Hacienda: busca productos en Amazon, extrae los datos y los guarda en un .txt para que tú, máquina, lo tengas todo mascadito.




🔧 ¿Qué necesitas para que no te explote el cerebro?
Primero, instala las librerías necesarias:

Código:
pip install selenium beautifulsoup4

Segundo, necesitas el navegador Edge instalado y configurado (sí, Edge, no te quejes). Y tercero, quita el comentario de esta línea si quieres que sea más sigiloso que un ninja:

Python:
# options.add_argument("--headless")



💥 Código completito
Aquí tienes la joya de la corona. Cópialo, pégalo y que el dios de Python se apiade de ti:

Python:
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import time
import urllib.parse


def setup_driver():
    options = Options()
    # options.add_argument("--headless")        QUITAR EL COMENTARIO EN ESTA LÍNEA PARA QUE FUNCIONE SIN ABRIR UN NAVEGADOR.
    options.add_argument("--disable-gpu")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--disable-software-rasterizer")
    options.add_argument("--disable-extensions")
    options.add_argument("--disable-webgl")
    options.add_argument("--disable-accelerated-2d-canvas")
    options.add_experimental_option('excludeSwitches', ['enable-logging'])
    service = Service()
    return webdriver.Edge(service=service, options=options)

def search_amazon(driver, search_term: str):
    encoded_search = search_term.replace(" ", "+")
    url = f"https://www.amazon.es/s?k={encoded_search}"
    driver.get(url)
    print(f"Buscando: {search_term}")
    print(f"URL de búsqueda: {url}")
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "div.s-main-slot"))
    )  # Esperar a que se carguen los productos

def get_product_info(driver):
    products = []
    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')
  
    product_elements = soup.find_all('div', {'data-component-type': 's-search-result'})
    print(f"Encontrados {len(product_elements)} elementos de producto")
  
    for element in product_elements:
        try:
            link_element = element.find('a', class_='a-link-normal s-line-clamp-4 s-link-style a-text-normal')
            if not link_element:
                continue
          
            link = "https://www.amazon.es" + link_element['href']
          
            driver.get(link)
          
            # Esperar explícitamente al título del producto
            WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.ID, "productTitle"))
            )

            # Extraemos la página fuente de la página del producto
            product_html = driver.page_source
            product_soup = BeautifulSoup(product_html, 'html.parser')

            # Buscar el nombre del producto desde el <span id="productTitle">
            name_element = product_soup.find('span', id='productTitle')
            name = name_element.text.strip() if name_element else "Nombre no disponible"

            # Buscar el precio del producto
            price_whole = product_soup.find('span', class_='a-price-whole')
            price_fraction = product_soup.find('span', class_='a-price-fraction')
            price_symbol = product_soup.find('span', class_='a-price-symbol')

            if price_whole and price_fraction and price_symbol:
                price = f"{price_whole.text.strip()},{price_fraction.text.strip()} {price_symbol.text.strip()}"
            else:
                price = "Precio no disponible"

            # Buscar la política de devoluciones
            try:
                return_policy = driver.find_element(By.CLASS_NAME, 'offer-display-feature-text')
                has_return_policy = "Sí" if return_policy and product_soup.find('span', class_='a-size-small a-color-tertiary offer-display-feature-text-message') == "Ver política de devoluciones" else "No"
            except TimeoutException:
                has_return_policy = "No"

            products.append({
                "name": name,
                "price": price,
                "link": link,
                "has_return_policy": has_return_policy
            })
            print(f"Producto añadido: {name[:50]}... - Política de devoluciones: {has_return_policy}")

        except Exception as e:
            print(f"Error al procesar un producto: {str(e)}")
            print(f"Detalle del error: {e}")
            continue
  
    return products


def next_page(driver, search_term, page_number):
    # Modificar la URL con el número de la página siguiente
    encoded_search = search_term.replace(" ", "+")
    next_page_url = f"https://www.amazon.es/s?k={encoded_search}&page={page_number}"
  
    driver.get(next_page_url)
    print(f"Navegando a la página {page_number}")
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "div.s-main-slot"))
    )  # Esperar a que se carguen los productos

    # Verificar si la página contiene productos, si no, detener la paginación
    products = get_product_info(driver)
    if len(products) == 0:
        print("No se encontraron más productos. Deteniendo la búsqueda.")
        return False  # No hay productos, detener la búsqueda

    return True  # Hay productos, seguir con la paginación


def main():
    driver = setup_driver()
    search_term = input("¿Qué quieres buscar? ")
    search_amazon(driver, search_term)
  
    all_products = []
    page = 1
  
    while True:
        print(f"\nProcesando página {page}")
        products = get_product_info(driver)
        all_products.extend(products)

        with open("productos_encontrados.txt", "a", encoding="utf-8") as f:
            for product in all_products:
                f.write("-Producto encontrado-\n")
                f.write(f"Nombre: {product['name']}\n")
                f.write(f"Precio: {product['price']}\n")
                f.write(f"Enlace: {product['link']}\n")
                f.write(f"Política de devoluciones visible: {product['has_return_policy']}\n\n")

        print(f"\nSe han guardado {len(all_products)} productos en 'productos_encontrados.txt'")

        user_input = input("Presiona Enter para continuar a la siguiente página o 'q' para salir: ")
        if user_input.lower() == 'q':
            break
      
        # Llamamos a next_page() con el número de página incrementado
        if not next_page(driver, search_term, page + 1):
            break  # Si no hay más productos, salir del bucle
      
        page += 1

    driver.quit()

if __name__ == "__main__":
    main()




🧠 Cosas que vas a aprender (si no eres un zombi):
1️⃣ Scraping dinámico: Cómo manejar webs que cambian más que tu ex con Selenium y BeautifulSoup.
2️⃣ Automatización de búsquedas: El código construye URLs para buscar lo que te salga del alma.
3️⃣ Extracción y almacenamiento: Aprende a sacar datos útiles sin que te duela la cabeza.




⚠️ Esto es IMPORTANTE, así que léelo antes de irte a jugar a hacker:
Esto se hace con fines educativos. Sí, EDU-CA-TI-VOS. Nada de ir por ahí rascando datos a lo loco o liándola en Amazon. Si haces cosas chungas, te pillan y te jodes tú solito.


Aquí no hacemos el mal, ¿entendido? Esto es para que aprendas lo que se puede hacer con Python y que sepas cómo funcionan las webs. No seas el típico idiota que usa esto y luego llora cuando le bloquean la cuenta o algo peor.




Si te gusta, dale like al hilo y comenta algo, que esto no lo hago todos los días y han sido varias horas por la puta cantidad de fallos que me ha dado mientras iba aprendiendo a usar selenium y beautifulsoup

Me cago en todo que odio hablar por el chat y así no me voy a ganar el rango de noder. Bueno, al menos tenéis este contenido por la cara sin hidden content.
Buen post y bien explicado, a ver si te meten el reply
 
  • Like
Reacciones : daily8

inknot8x

Miembro muy activo
Noder
SE VIENE HILO UN LARGO.
El código adjunto puede que de algún error en algún momento, pero como muchos yo estoy aprendiendo así que os jodéis, que no he visto a nadie subir algo así y me ha llevado un buen rato hacerlo todo.

Hoy os traigo un hilo que os va a volar la cabeza 🤯. Os voy a enseñar cómo con Python y un poco de cerebro (si tienes, claro), puedes hacer un scraping de productos de Amazon y sacar nombres, precios, enlaces... todo como un auténtico cerdo trufero 🐗. ¿Estás listo o vuelves a la cueva? Vamos al lío:




🔪 ¿Qué hace este código?
Te pide que le digas qué quieres buscar, rollo "bragas de abuela", "velas aromáticas" o "sables láser de dos euros". Luego, se pone a trabajar como si le debiera dinero a Hacienda: busca productos en Amazon, extrae los datos y los guarda en un .txt para que tú, máquina, lo tengas todo mascadito.




🔧 ¿Qué necesitas para que no te explote el cerebro?
Primero, instala las librerías necesarias:

Código:
pip install selenium beautifulsoup4

Segundo, necesitas el navegador Edge instalado y configurado (sí, Edge, no te quejes). Y tercero, quita el comentario de esta línea si quieres que sea más sigiloso que un ninja:

Python:
# options.add_argument("--headless")



💥 Código completito
Aquí tienes la joya de la corona. Cópialo, pégalo y que el dios de Python se apiade de ti:

Python:
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import time
import urllib.parse


def setup_driver():
    options = Options()
    # options.add_argument("--headless")        QUITAR EL COMENTARIO EN ESTA LÍNEA PARA QUE FUNCIONE SIN ABRIR UN NAVEGADOR.
    options.add_argument("--disable-gpu")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--disable-software-rasterizer")
    options.add_argument("--disable-extensions")
    options.add_argument("--disable-webgl")
    options.add_argument("--disable-accelerated-2d-canvas")
    options.add_experimental_option('excludeSwitches', ['enable-logging'])
    service = Service()
    return webdriver.Edge(service=service, options=options)

def search_amazon(driver, search_term: str):
    encoded_search = search_term.replace(" ", "+")
    url = f"https://www.amazon.es/s?k={encoded_search}"
    driver.get(url)
    print(f"Buscando: {search_term}")
    print(f"URL de búsqueda: {url}")
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "div.s-main-slot"))
    )  # Esperar a que se carguen los productos

def get_product_info(driver):
    products = []
    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')
  
    product_elements = soup.find_all('div', {'data-component-type': 's-search-result'})
    print(f"Encontrados {len(product_elements)} elementos de producto")
  
    for element in product_elements:
        try:
            link_element = element.find('a', class_='a-link-normal s-line-clamp-4 s-link-style a-text-normal')
            if not link_element:
                continue
          
            link = "https://www.amazon.es" + link_element['href']
          
            driver.get(link)
          
            # Esperar explícitamente al título del producto
            WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.ID, "productTitle"))
            )

            # Extraemos la página fuente de la página del producto
            product_html = driver.page_source
            product_soup = BeautifulSoup(product_html, 'html.parser')

            # Buscar el nombre del producto desde el <span id="productTitle">
            name_element = product_soup.find('span', id='productTitle')
            name = name_element.text.strip() if name_element else "Nombre no disponible"

            # Buscar el precio del producto
            price_whole = product_soup.find('span', class_='a-price-whole')
            price_fraction = product_soup.find('span', class_='a-price-fraction')
            price_symbol = product_soup.find('span', class_='a-price-symbol')

            if price_whole and price_fraction and price_symbol:
                price = f"{price_whole.text.strip()},{price_fraction.text.strip()} {price_symbol.text.strip()}"
            else:
                price = "Precio no disponible"

            # Buscar la política de devoluciones
            try:
                return_policy = driver.find_element(By.CLASS_NAME, 'offer-display-feature-text')
                has_return_policy = "Sí" if return_policy and product_soup.find('span', class_='a-size-small a-color-tertiary offer-display-feature-text-message') == "Ver política de devoluciones" else "No"
            except TimeoutException:
                has_return_policy = "No"

            products.append({
                "name": name,
                "price": price,
                "link": link,
                "has_return_policy": has_return_policy
            })
            print(f"Producto añadido: {name[:50]}... - Política de devoluciones: {has_return_policy}")

        except Exception as e:
            print(f"Error al procesar un producto: {str(e)}")
            print(f"Detalle del error: {e}")
            continue
  
    return products


def next_page(driver, search_term, page_number):
    # Modificar la URL con el número de la página siguiente
    encoded_search = search_term.replace(" ", "+")
    next_page_url = f"https://www.amazon.es/s?k={encoded_search}&page={page_number}"
  
    driver.get(next_page_url)
    print(f"Navegando a la página {page_number}")
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "div.s-main-slot"))
    )  # Esperar a que se carguen los productos

    # Verificar si la página contiene productos, si no, detener la paginación
    products = get_product_info(driver)
    if len(products) == 0:
        print("No se encontraron más productos. Deteniendo la búsqueda.")
        return False  # No hay productos, detener la búsqueda

    return True  # Hay productos, seguir con la paginación


def main():
    driver = setup_driver()
    search_term = input("¿Qué quieres buscar? ")
    search_amazon(driver, search_term)
  
    all_products = []
    page = 1
  
    while True:
        print(f"\nProcesando página {page}")
        products = get_product_info(driver)
        all_products.extend(products)

        with open("productos_encontrados.txt", "a", encoding="utf-8") as f:
            for product in all_products:
                f.write("-Producto encontrado-\n")
                f.write(f"Nombre: {product['name']}\n")
                f.write(f"Precio: {product['price']}\n")
                f.write(f"Enlace: {product['link']}\n")
                f.write(f"Política de devoluciones visible: {product['has_return_policy']}\n\n")

        print(f"\nSe han guardado {len(all_products)} productos en 'productos_encontrados.txt'")

        user_input = input("Presiona Enter para continuar a la siguiente página o 'q' para salir: ")
        if user_input.lower() == 'q':
            break
      
        # Llamamos a next_page() con el número de página incrementado
        if not next_page(driver, search_term, page + 1):
            break  # Si no hay más productos, salir del bucle
      
        page += 1

    driver.quit()

if __name__ == "__main__":
    main()




🧠 Cosas que vas a aprender (si no eres un zombi):
1️⃣ Scraping dinámico: Cómo manejar webs que cambian más que tu ex con Selenium y BeautifulSoup.
2️⃣ Automatización de búsquedas: El código construye URLs para buscar lo que te salga del alma.
3️⃣ Extracción y almacenamiento: Aprende a sacar datos útiles sin que te duela la cabeza.




⚠️ Esto es IMPORTANTE, así que léelo antes de irte a jugar a hacker:
Esto se hace con fines educativos. Sí, EDU-CA-TI-VOS. Nada de ir por ahí rascando datos a lo loco o liándola en Amazon. Si haces cosas chungas, te pillan y te jodes tú solito.


Aquí no hacemos el mal, ¿entendido? Esto es para que aprendas lo que se puede hacer con Python y que sepas cómo funcionan las webs. No seas el típico idiota que usa esto y luego llora cuando le bloquean la cuenta o algo peor.




Si te gusta, dale like al hilo y comenta algo, que esto no lo hago todos los días y han sido varias horas por la puta cantidad de fallos que me ha dado mientras iba aprendiendo a usar selenium y beautifulsoup

Me cago en todo que odio hablar por el chat y así no me voy a ganar el rango de noder. Bueno, al menos tenéis este contenido por la cara sin hidden content.
el codigo lo has desarrollado tu?
 
  • Like
Reacciones : daily8

zuzi.uwu

No me toquéis los colores. -.-
Nodero
Noder
el codigo lo has desarrollado tu?
creo que si.

Mi granito de arena:
Aquí tienes un ejemplo para extraer datos básicos directamente desde la página de resultados, sin navegar a cada producto:
Código:
def get_basic_product_info(driver):
    products = []
    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')
   
    product_elements = soup.find_all('div', {'data-component-type': 's-search-result'})
   
    for element in product_elements:
        try:
            name_element = element.find('span', class_='a-size-medium a-color-base a-text-normal')
            name = name_element.text.strip() if name_element else "Nombre no disponible"
           
            price_whole = element.find('span', class_='a-price-whole')
            price_fraction = element.find('span', class_='a-price-fraction')
            price_symbol = element.find('span', class_='a-price-symbol')
           
            if price_whole and price_fraction and price_symbol:
                price = f"{price_whole.text.strip()},{price_fraction.text.strip()} {price_symbol.text.strip()}"
            else:
                price = "Precio no disponible"
           
            link_element = element.find('a', class_='a-link-normal s-no-outline')
            link = "https://www.amazon.es" + link_element['href'] if link_element else "Enlace no disponible"
           
            products.append({"name": name, "price": price, "link": link})
        except Exception as e:
            print(f"Error al procesar un producto: {e}")
            continue
   
    return products

Habría que corregirlo un poco pero me da pereza....
 
  • Like
Reacciones : daily8

zuzi.uwu

No me toquéis los colores. -.-
Nodero
Noder
@zuzi.uwu gracias!!! La cosa es que en tu código no veo que hagas la búsqueda de las políticas de devolución, que es lo que nos interesa aquí.
Y razón tienes, no se puede llegar a las políticas de devolución sin entrar primero al artículo, gracias por recordarme ese detalle
 
  • Like
Reacciones : daily8

daily8

Miembro muy activo
el codigo lo has desarrollado tu?
Al principio sí, luego me ayudé de IA, pero la IA me hacía mierdas como catedrales así que acabé tocando yo el código para ir cambiando todo en lo que encontraba error (que no era poco).

Estoy aprendiendo poco a poco así que un buen rato sí me tiré editando la mierda esta.
 
  • Qué puto asco
Reacciones : KaliLewis

aliproxx07

Miembro muy activo
SE VIENE HILO UN LARGO.
El código adjunto puede que de algún error en algún momento, pero como muchos yo estoy aprendiendo así que os jodéis, que no he visto a nadie subir algo así y me ha llevado un buen rato hacerlo todo.

Hoy os traigo un hilo que os va a volar la cabeza 🤯. Os voy a enseñar cómo con Python y un poco de cerebro (si tienes, claro), puedes hacer un scraping de productos de Amazon y sacar nombres, precios, enlaces... todo como un auténtico cerdo trufero 🐗. ¿Estás listo o vuelves a la cueva? Vamos al lío:




🔪 ¿Qué hace este código?
Te pide que le digas qué quieres buscar, rollo "bragas de abuela", "velas aromáticas" o "sables láser de dos euros". Luego, se pone a trabajar como si le debiera dinero a Hacienda: busca productos en Amazon, extrae los datos y los guarda en un .txt para que tú, máquina, lo tengas todo mascadito.



*** Hidden text: cannot be quoted. ***
[/REPLY]
a ver
 

joootaace

Miembro muy activo
SE VIENE HILO UN LARGO.
El código adjunto puede que de algún error en algún momento, pero como muchos yo estoy aprendiendo así que os jodéis, que no he visto a nadie subir algo así y me ha llevado un buen rato hacerlo todo.

Hoy os traigo un hilo que os va a volar la cabeza 🤯. Os voy a enseñar cómo con Python y un poco de cerebro (si tienes, claro), puedes hacer un scraping de productos de Amazon y sacar nombres, precios, enlaces... todo como un auténtico cerdo trufero 🐗. ¿Estás listo o vuelves a la cueva? Vamos al lío:




🔪 ¿Qué hace este código?
Te pide que le digas qué quieres buscar, rollo "bragas de abuela", "velas aromáticas" o "sables láser de dos euros". Luego, se pone a trabajar como si le debiera dinero a Hacienda: busca productos en Amazon, extrae los datos y los guarda en un .txt para que tú, máquina, lo tengas todo mascadito.



*** Hidden text: cannot be quoted. ***
[/REPLY]
Uy
 

inknot8x

Miembro muy activo
Noder
Al principio sí, luego me ayudé de IA, pero la IA me hacía mierdas como catedrales así que acabé tocando yo el código para ir cambiando todo en lo que encontraba error (que no era poco).

Estoy aprendiendo poco a poco así que un buen rato sí me tiré editando la mierda esta.
joder pues ole tu polla bro. Vaya currazo, grandee
 
  • Viva España
Reacciones : daily8

omaryld01

Miembro muy activo
SE VIENE HILO UN LARGO.
El código adjunto puede que de algún error en algún momento, pero como muchos yo estoy aprendiendo así que os jodéis, que no he visto a nadie subir algo así y me ha llevado un buen rato hacerlo todo.

Hoy os traigo un hilo que os va a volar la cabeza 🤯. Os voy a enseñar cómo con Python y un poco de cerebro (si tienes, claro), puedes hacer un scraping de productos de Amazon y sacar nombres, precios, enlaces... todo como un auténtico cerdo trufero 🐗. ¿Estás listo o vuelves a la cueva? Vamos al lío:




🔪 ¿Qué hace este código?
Te pide que le digas qué quieres buscar, rollo "bragas de abuela", "velas aromáticas" o "sables láser de dos euros". Luego, se pone a trabajar como si le debiera dinero a Hacienda: busca productos en Amazon, extrae los datos y los guarda en un .txt para que tú, máquina, lo tengas todo mascadito.



*** Hidden text: cannot be quoted. ***
[/REPLY]
Veamos