<jupyter_start><jupyter_text>se importan paqueterias necesarias<jupyter_code>import pandas as pd
import pandasql as ps
#from urllib.request import urlopen
#import urllib.request
#import requests
import time 
import numpy as np
import re
from selenium import webdriver
#from selenium.webdriver.common.keys import Keys<jupyter_output><empty_output><jupyter_text>requeremientos<jupyter_code>## instalacion de web driver 
## instalacion de selenium y pandas sql<jupyter_output><empty_output><jupyter_text>definiciones<jupyter_code># tag html: Una etiqueta HTML es una pieza de lenguaje de marcado que se utiliza para indicar el principio y el final 
#           de un elemento HTML en un documento HTML. Como parte de un elemento HTML, las etiquetas HTML ayudan 
#           a los navegadores web a convertir documentos HTML en páginas web.


# class html: La clase es un atributo que especifica uno o más nombres de clase para un elemento HTML. El atributo de clase 
#             se puede utilizar en cualquier elemento HTML. CSS y JavaScript pueden usar el nombre de clase para realizar 
#             ciertas tareas para elementos con el nombre de clase especificado
aux=pd.DataFrame()
aux.to_excel("df_soriana.xlsx",index=False)
################<jupyter_output><empty_output><jupyter_text>se hace el primer web scraper<jupyter_code>def Buscador_Precios_Selenium_Soriana(producto):
    
    ### ingresamos a la pagina web 
    path ="C:\webdriver3\chromedriver.exe"
    #path= mipath
    driver=webdriver.Chrome(path)
    url= "https://www.soriana.com/buscar?q="+producto+"&cid=&search-button="
    driver.get(url)
    
    ####### Accedemos a los elementos que contienen los datos que queremos de la pagina web 
    

    productos= driver.find_elements_by_class_name("product")
    
    ### accedemos a las urls almacenadas en la variable productos

    lista_urls=list()
    for i in range(len(productos)):
        try:
            lista_urls.append(productos[i].find_element_by_tag_name("a").get_attribute("href"))
        except:
            lista_urls.append(np.nan)
            
    ### accedemos a los nombres de los productos

    lista_nombres=list()
    for i in range(len(productos)):
        try:
            lista_nombres.append(productos[i].find_elements_by_tag_name("a")[2].text)
        except:
            lista_nombres.append(np.nan)
            
            
    ### accedemos a los precios base y promo de los productos 

    lista_precios=list()
    lista_promos=list()
    for i in range(len(productos)):
        try:
            lista_precios.append(productos[i].find_elements_by_class_name("value")[0].text)
        except:
            lista_precios.append(np.nan)
        try:
            lista_promos.append(productos[i].find_elements_by_class_name("value")[1].text)
        except:
            lista_promos.append(np.nan)





    df_soriana =pd.DataFrame({"nombre":lista_nombres,"url":lista_urls,"precio1":lista_promos,"precio2":lista_precios})
    df_soriana["autoservicio"]="soriana"
    df_soriana["marca"]= producto
    df_soriana["fecha"]= time.strftime("%d/%m/%y")

    df_soriana = df_soriana[["fecha","autoservicio","marca","nombre","url","precio1","precio2"]]
    ## este filtro apenas se agrega

    #df_soriana = df_soriana[df_soriana['nombre'].astype(str).str.contains(r'\b{}\b'.format(producto), regex=True, case=False)]
    df_soriana  =df_soriana.reset_index(drop=True)



    datos_webscraper=pd.read_excel("df_soriana.xlsx")

    datos_webscraper= pd.concat([datos_webscraper,df_soriana],axis=0)

    datos_webscraper.to_excel("df_soriana.xlsx",index=False)

    driver.quit()
    return df_soriana

    
for productos in ["television","xbox","laptop"]:
    Buscador_Precios_Selenium_Soriana(productos)
    #Buscador_Precios_Selenium_Superama(productos)
    #Buscador_Precios_Selenium_Chedraui(productos)
df_soriana=pd.read_excel("df_soriana.xlsx")
df_soriana
def precios_floats(datos):

        
    #### eliminamos el signo de pesos de ambas columnas
    
    for i in range(len(datos["precio1"])):
        try:
            datos["precio1"].iloc[i]=datos["precio1"].iloc[i].strip("$")
        except:
            pass
        
    for i in range(len(datos["precio2"])):
        try:
            datos["precio2"].iloc[i]=datos["precio2"].iloc[i].strip("$")
        except:
            pass
        
    
    ### quitamos la separacion de comas para miles
    
    datos["precio1"]=datos["precio1"].replace(",","",regex=True)
    datos["precio2"]=datos["precio2"].replace(",","",regex=True)
    
     
        
    ### convertimos los precios a numericos    
    datos['precio1'] = pd.to_numeric(datos['precio1'], errors='coerce')
    datos['precio2'] = pd.to_numeric(datos['precio2'], errors='coerce')

    
    
    datos.to_excel("df_soriana_limpio.xlsx",index=False)
        
     ### visualizamos los tipos de datos
    print(datos.dtypes)
    return datos
precios_floats(df_soriana)
df_soriana=pd.read_excel("df_soriana_limpio.xlsx")
df_soriana
ps.sqldf("select  * from df_soriana where (marca= 'xbox') limit 5")
ps.sqldf("select count(*) from df_soriana where (marca= 'television') ")
ps.sqldf("select marca,avg(precio2) as preciopromedio from df_soriana group by marca ")
ps.sqldf("select *  from df_soriana where precio1 is not null ")
ps.sqldf("select *  from df_soriana where precio1 <10000 or precio2<10000 ")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1178432462479155, 'fraction_numerical': 0.0070409486751899205, 'mean_word_length': 3.7185314685314683, 'pattern_counts': {'":': 4, '<': 19, '<?xml version=': 0, '>': 17, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '186233', 'license': 'MIT', 'n_tokens_mistral': 1946, 'n_tokens_neox': 1915, 'n_words': 378, 'path': 'WEB-SCRAPING/web scraper manejo de datos (1) original.ipynb', 'repo_name': 'jrtorresb/TAREAS_FC', 'size': '5397'}