Código fuente para sisedeinversiones.form_eight.eight

"""
*Class ScrapingEight*
=====================

"""

import time

import pandas as pd
import rpa as r

from ..utils.read_utils import ReadsFiles


[documentos] class ScrapingEight(ReadsFiles): """Scraping Class Attributes Args: file_read (_type_): It is the address where the file with the CUI codes that we are going to consume is located. path_export (_type_): Address where the information generated after data extraction will be exported. num_range (_type_): Indicates the range of records that will be worked on, separated by a "_" between the upper and lower limits. file_type (_type_): This is the type of file you want to export. At the moment it is programmed to generate .xlsx files. year (_type_): Indicate the year of the records, this information will be used to generate the name of the .xlsx file that will be exported with the collected information. """ def __init__(self, file_read, num_range, path_export, file_type, year): ReadsFiles.__init__(self, file_read=file_read, num_range=num_range) self.path_export: str = path_export self.file_type: str = file_type self.year: str = year
[documentos] def read_file(self): """We import the .csv file with the CUI's Returns: _type_: _description_ """ return ReadsFiles(self.file_read, self.num_range).read_file_csv()
[documentos] def scrape_info(self): """_summary_ Returns: _type_: _description_ """ lista_cui = self.read_file() # --------------------------------------------------------------------- # ---- Creamos los objetos de listas para almacenar la información ---- # --------------------------------------------------------------------- # Responsabilidad funcional del proyecto de inversion ssi_cui = [] ssi_pip = [] ssi_funcion = [] ssi_divfuncional = [] ssi_grupfuncional = [] ssi_sectorresponsable = [] ssi_tipologiaproyecto = [] # Articulacion con el programa multianual de inversiones (PMI) ssi_brecha = [] ssi_brecha_indicador = [] ssi_brecha_um = [] ssi_brecha_espaciogeografico = [] ssi_brecha_contribucioncierre = [] # Institucionalidad ssi_opmi = [] ssi_uf = [] ssi_uei = [] ssi_uep = [] # Localizacion de la inversion publica ssi_gps = [] ssi_departamento = [] ssi_provincia = [] ssi_distrito = [] ssi_centro_poblado = [] # -------------------------------- # ---- Comenzamos el scraping ---- # -------------------------------- r.init() # r.init(turbo_mode=True) for one_cui in range(len(lista_cui)): r.url( f"https://ofi5.mef.gob.pe/invierte/ejecucion/verFichaEjecucion/{lista_cui[one_cui]}" ) time.sleep(3) element_exist = r.present( '//*[@id="divVistaPreliminar"]/table[1]/tbody/tr[1]/td[1]' ) if not element_exist: time.sleep(2) print( f"Se esta trabajando el regtistro {one_cui} con el CUI {lista_cui[one_cui]} y el elemento existe {element_exist}" ) # Identificar y almacenar la información de la página cui = r.read('//*[@id="divVistaPreliminar"]/table[1]/tbody/tr[1]/td[2]/div') pip = r.read('//*[@id="divVistaPreliminar"]/table[1]/tbody/tr[2]/td[2]/div') funcion = r.read('//*[@id="divVistaPreliminar"]/table[2]/tbody/tr[1]/td[3]') divfuncional = r.read( '//*[@id="divVistaPreliminar"]/table[2]/tbody/tr[2]/td[3]' ) grupfuncional = r.read( '//*[@id="divVistaPreliminar"]/table[2]/tbody/tr[3]/td[3]' ) sectorresponsable = r.read( '//*[@id="divVistaPreliminar"]/table[2]/tbody/tr[4]/td[3]' ) tipologiaproyecto = r.read( '//*[@id="divVistaPreliminar"]/table[2]/tbody/tr[5]/td[3]' ) brecha = r.read('//*[@id="divVistaPreliminar"]/table[3]/tbody/tr/td[1]') brecha_indicador = r.read( '//*[@id="divVistaPreliminar"]/table[3]/tbody/tr/td[2]' ) brecha_um = r.read('//*[@id="divVistaPreliminar"]/table[3]/tbody/tr/td[3]') brecha_espaciogeografico = r.read( '//*[@id="divVistaPreliminar"]/table[3]/tbody/tr/td[4]' ) brecha_contribucioncierre = r.read( '//*[@id="divVistaPreliminar"]/table[3]/tbody/tr/td[5]' ) opmi = r.read('//*[@id="divVistaPreliminar"]/table[4]/tbody/tr[1]/td[3]') uf = r.read('//*[@id="divVistaPreliminar"]/table[4]/tbody/tr[2]/td[3]') uei = r.read('//*[@id="divVistaPreliminar"]/table[4]/tbody/tr[3]/td[3]') uep = r.read('//*[@id="divVistaPreliminar"]/table[4]/tbody/tr[4]/td[3]') if r.present('//*[@id="divVistaPreliminar"]/table[5]/tbody/tr'): time.sleep(1) gps = r.read('//*[@id="divVistaPreliminar"]/table[5]/tbody/tr/td[1]') departamento = r.read( '//*[@id="divVistaPreliminar"]/table[5]/tbody/tr/td[2]' ) provincia = r.read( '//*[@id="divVistaPreliminar"]/table[5]/tbody/tr/td[3]' ) distrito = r.read( '//*[@id="divVistaPreliminar"]/table[5]/tbody/tr/td[4]' ) centro_poblado = r.read( '//*[@id="divVistaPreliminar"]/table[5]/tbody/tr/td[5]' ) else: gps = "0" departamento = "0" provincia = "0" distrito = "0" centro_poblado = "0" ssi_cui.append(cui) ssi_pip.append(pip) ssi_funcion.append(funcion) ssi_divfuncional.append(divfuncional) ssi_grupfuncional.append(grupfuncional) ssi_sectorresponsable.append(sectorresponsable) ssi_tipologiaproyecto.append(tipologiaproyecto) ssi_brecha.append(brecha) ssi_brecha_indicador.append(brecha_indicador) ssi_brecha_um.append(brecha_um) ssi_brecha_espaciogeografico.append(brecha_espaciogeografico) ssi_brecha_contribucioncierre.append(brecha_contribucioncierre) ssi_opmi.append(opmi) ssi_uf.append(uf) ssi_uei.append(uei) ssi_uep.append(uep) ssi_gps.append(gps) ssi_departamento.append(departamento) ssi_provincia.append(provincia) ssi_distrito.append(distrito) ssi_centro_poblado.append(centro_poblado) time.sleep(1) r.close() time.sleep(2) return ( ssi_cui, ssi_pip, ssi_funcion, ssi_divfuncional, ssi_grupfuncional, ssi_sectorresponsable, ssi_tipologiaproyecto, ssi_brecha, ssi_brecha_indicador, ssi_brecha_um, ssi_brecha_espaciogeografico, ssi_brecha_contribucioncierre, ssi_opmi, ssi_uf, ssi_uei, ssi_uep, ssi_gps, ssi_departamento, ssi_provincia, ssi_distrito, ssi_centro_poblado, )
[documentos] def download_data(self): """_summary_ Returns: _type_: _description_ """ ( ssi_cui, ssi_pip, ssi_funcion, ssi_divfuncional, ssi_grupfuncional, ssi_sectorresponsable, ssi_tipologiaproyecto, ssi_brecha, ssi_brecha_indicador, ssi_brecha_um, ssi_brecha_espaciogeografico, ssi_brecha_contribucioncierre, ssi_opmi, ssi_uf, ssi_uei, ssi_uep, ssi_gps, ssi_departamento, ssi_provincia, ssi_distrito, ssi_centro_poblado, ) = self.scrape_info() print( f"El total de CUIs scrapeados es: {len(ssi_cui)} y se esta exportando a Excel" ) ssi_formato8 = pd.DataFrame( { "cui": ssi_cui, "nombre_pip": ssi_pip, "funcion": ssi_funcion, "division_funcional": ssi_divfuncional, "grupo_funcional": ssi_grupfuncional, "sector_responsable": ssi_sectorresponsable, "tipologia_proyecto": ssi_tipologiaproyecto, "brecha_identificada": ssi_brecha, "brecha_indicador": ssi_brecha_indicador, "brecha_unidad": ssi_brecha_um, "brecha_geografico": ssi_brecha_espaciogeografico, "cierra_brecha": ssi_brecha_contribucioncierre, "opmi": ssi_opmi, "uf": ssi_uf, "uei": ssi_uei, "uep": ssi_uep, "gps": ssi_gps, "departamento": ssi_departamento, "provincia": ssi_provincia, "distrito": ssi_distrito, "centro_poblado": ssi_centro_poblado, } ) return ssi_formato8.to_excel( f"{self.path_export}/ssi_formato8_{self.year}_regts_{self.num_range}{self.file_type}", index=False, header=True, )