Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Chequear automáticamente el precio de un artículo en Amazon con Python

6 abril, 2020
python code

Hoy en día todo el mundo relacionado con las nuevas tecnologías le suena haber escuchado el lenguaje de programación Python ya que es uno de los más conocidos debido a su sencillez y simpleza.

Con Python tenemos un abanico de posibilidades muy amplio ya que podemos aprender Inteligencia Artificial, Data Science, Análisis de Datos, Desarrollo Web, Redes neuronales, Videojuegos … por lo que aprender programación Python siempre es una buena idea.

También podemos automatizar tareas para ahorrarnos tiempo y en este post os voy a presentar un sencillo código con el que podrás chequear precios de artículos de Amazon para saber si han bajado de precio y entonces comprar.

Aquí os dejo el código:

 
import requests
from bs4 import BeautifulSoup
import smtplib
import time
 
con=0
URL= 'https://www.amazon.es/Apple-iPhone-11-128-GB-en-Verde/dp/B07XS5MSW4/ref=sr_1_7?keywords=iphone&qid=1585690399&sr=8-7'
 
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'}
 
def revisa_precio():
    page = requests.get(URL, headers=headers)
 
    soup = BeautifulSoup(page.content, 'html.parser')
 
    tittle = soup.find(id='productTitle').get_text()
    price = soup.find(id='priceblock_ourprice').get_text()
    price1 = float(price[0:3])
 
    if (price1 < 800):
        enviar_email()
    else:
        print('El precio sigue alto')
        print(price1)
 
 
 
def enviar_email():
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.login('tucorreo@gmail.com','tu contraseña')
 
    subject = 'El precio ha bajado'
    body = 'Revisa ahora el precio de este link https://www.amazon.es/Apple-iPhone-11-128-GB-en-Verde/dp/B07XS5MSW4/ref=sr_1_7?keywords=iphone&qid=1585690399&sr=8-7'
    msg = f"Subjet: {subject}\n\n{body}"
 
    server.sendmail('tucorreo@gmail.com', 'email_para_enviar_alerta@gmail.com',msg)
 
    print('email enviado')
 
    server.quit()
 
revisa_precio()
 
while(True):
    revisa_precio()
    con += 1
    print(con)
    time.sleep(360*12)

Lo primero que debes saber para entender este código son las librerías y módulos que vamos a usar:

  • request: es una librería para hacer solicitudes HTTP y la usamos para hacer una solicitud a la url del artículo de Amazon
  • Beautifulsoup: es una librería para analizar documentos HTML y la usaremos para saber el precio del artículo
  • smtplib: es un módulo que define un objeto de sesión de cliente SMTP que se puede usar para enviar un email
  • time: módulo para controlar el tiempo

Ahora necesitamos seleccionar un artículo de Amazon, en mi caso he seleccionado un Apple iPhone 11 (128 GB) el cual cuesta unos 839eu, con esto definimos nuestra URL. A continuación definimos el headers que será un diccionario con nuestra user-agent (esto dependerá de tu navegador, si no sabes cual escribe en google “my user agent” y copia esa línea dentro del diccionario).

python

Ahora vamos a desarrollar la función revisar_precio:

  1. Hacemos una solicitud a la url con la librería request y guardamos page
  2. Con page.content hacemos la sopa donde tenemos todo el código html del post donde esta nuestro artículo
  3. Con soup.find buscamos el nombre del producto, el precio del mismo y los guardamos
  4. Filtramos el precio del producto ya que no interesa el símbolo de euro o los centimos
  5. Hacemos un if donde si el precio baja de la cantidad que deseemos llame a la función enviar_email

Definimos la función enviar_email:

En esta función solo debemos cambiar algunas líneas ya lo demás lo podemos dejar por defecto. Así que ahora te diré que debes cambiar:

  • server = smtplib.SMTP(‘smtp.gmail.com’, 587) Si utilizas Gmail esta línea no deberás cambiarla
  • server.login(‘tucorreo@gmail.com’,’tu contraseña’) Esta deberás cambiarla ya que Python necesita acceso a tu cuenta de Gmail para enviar los emails
  • server.sendmail(‘tucorreo @gmail.com’, ’email_para_enviar_tu_alerta@gmail.com’,msg) Añade tu correo y el email donde quieres enviar la alerta de la bajada del precio
  • Por último, no te olvides de aceptar desde la cuenta gmail de la cual vallas a enviar el email de alerta el control de la cuenta desde aplicaciones exteriores “poco seguras” ya que vamos a controlar esa cuenta desde Python para mandar los emails. Para ello logueate en el gmail y ve a https://myaccount.google.com/security y permite el acceso

Una vez tenemos estas dos funciones solo nos queda implementar un while loop que siempre estará corriendo y chequeando el precio y en caso de que el precio baje pues que nos mande un email. En mi caso he puesto que revise el precio cada 12 horas.

Espero que toméis idea de este ejemplo y si os interesa aprender Python nos vemos en Unipython,
saludos!