Martupi8

practica aii 1

Oct 19th, 2021
655
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import sqlite3
  2. import tkinter.messagebox
  3. import urllib.request
  4.  
  5. from bs4 import BeautifulSoup
  6.  
  7. import os
  8. import ssl
  9. if (not os.environ.get('PYTHONHTTPSVERIFY', '') and
  10.         getattr(ssl, '_create_unverified_context', None)):
  11.     ssl._create_default_https_context = ssl._create_unverified_context
  12.  
  13.  
  14. def store():
  15.     conn = sqlite3.connect('vinilos.db')
  16.     conn.execute("DROP TABLE IF EXISTS VINILO")
  17.     conn.execute('''CREATE TABLE VINILO
  18.       (ID INTEGER PRIMARY KEY    AUTOINCREMENT,
  19.       INTERPRETE          TEXT    NOT NULL,
  20.       TITULO      TEXT    NOT NULL,
  21.       GENERO        TEXT    NOT NULL,
  22.       PAIS      TEXT    NOT NULL,
  23.       COMPAÑIA      TEXT    NOT NULL,
  24.       PRECIO      FLOAT    NOT NULL);''')
  25.     conn.commit()
  26.     cursor = conn.execute("SELECT COUNT(*) FROM VINILO")
  27.     tkinter.messagebox.showinfo(
  28.         "Base Datos", f"BD creada correctamente, hay {str(cursor.fetchone()[0])} registros")
  29.     conn.close()
  30.  
  31.  
  32. def cargar(url):
  33.     conn = sqlite3.connect('vinilos.db')
  34.  
  35.     for i in range(1, 3):
  36.         url = f'https://www.disc-order.com/es/results.php?ARTISTATYPE=begins&FAMCODIGO=LP&STOCKTYPE=instock&TYPE=adv&orderfiel=&page={i}'
  37.         f = urllib.request.urlopen(url)
  38.         soup = BeautifulSoup(f, 'lxml')
  39.         items = soup.find(id="newresults").find_all("div", class_="item")
  40.         discos = []
  41.         for item in items:
  42.             enlace = item.find("a", class_="l")["href"]
  43.             enlace = f'https://www.disc-order.com/{enlace}'
  44.             g = urllib.request.urlopen(enlace)
  45.             detalles = BeautifulSoup(g, 'lxml')
  46.             divDetails = detalles.find(id="newdetails").find(
  47.                 "div", class_="details")
  48.  
  49.             interprete = divDetails.find_all(
  50.                 "span", class_="dt", string="Intérprete / Grupo: ")
  51.             interprete = interprete[0].find_next_sibling(
  52.                 "span").contents[0] if len(interprete) else "-"
  53.  
  54.             titulo = divDetails.find_all(
  55.                 "span", class_="dt", string="Titulo / Descripción: ")
  56.             titulo = titulo[
  57.                 0].find_next_sibling("span").contents[0] if len(titulo) else "-"
  58.  
  59.             genero = divDetails.find_all(
  60.                 "span", class_="dt", string="Género: ")
  61.             genero = genero[
  62.                 0].find_next_sibling("span").contents[0] if len(genero) else "-"
  63.  
  64.             pais = divDetails.find_all("span", class_="dt", string="País: ")
  65.             pais = pais[
  66.                 0].find_next_sibling("span").contents[0] if len(pais) else '-'
  67.  
  68.             compañia = divDetails.find_all(
  69.                 "span", class_="dt", string="Compañía: ")
  70.             compañia = compañia[
  71.                 0].find_next_sibling("span").contents[0] if len(compañia) else '-'
  72.  
  73.             precioCompleto = detalles.find(id="newdetails").find_all(
  74.                 "span", class_="ii")[0].contents[0]
  75.             precioCompleto = precioCompleto.split(" ")
  76.             precio = precioCompleto[1].replace(
  77.                 ",", ".") if len(precioCompleto) > 1 else 0
  78.             print([interprete, titulo, genero, pais, compañia, precio])
  79.             discos.append([interprete, titulo, genero, pais, compañia, precio])
  80.  
  81.     cur = conn.cursor()
  82.     cur.executemany(
  83.         "INSERT INTO VINILO (INTERPRETE, TITULO, GENERO, PAIS, COMPAÑIA, PRECIO) VALUES (?,?,?,?,?,?)", discos)
  84.     conn.commit()
  85.     cur.close()
  86.     conn.close()
  87.  
  88.  
  89. cargar("https://www.discorder.com/es/results.php?ARTISTATYPE=begins&FAMCODIGO=LP&STOCKTYPE=instock&TYPE=adv&orderfield=6")
  90.  
RAW Paste Data