Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_final/grupo2/Trabajo_Final_Web_scraping.ipynb
4683 views
Kernel: Python 3 (ipykernel)

Web scrapping

2.1 Info-Juntos

Usted debe descargar un excel con la información de hogares afiliados y abonados del programa Juntos en el Valle del VRAEM. Debe juntar la información desde 2014-2021. Seguir las siguientes instrucciones:

  • Hacer clik en la opción VRAEM que está en el lado izquierda de la página.

  • Luego selccionar el año. El icono está al lado de AMBITO VRAEM.

  • Ir al icono de excel como presenta la siguiente Imagen 1 imagen y hacer click en la opción descargar tabla.

  • Repetir el mismo procedimiento para cada año del periodo 2014-2021.

  • Con las hojas de excel descargadas, usted debe juntarlas en un Pandas Dataframe de tal forma que el resultado tenga la estructura de la imagen 2. Notese que se ha eliminado las columnas Establecimiento de Salud e Instituciones educativas. Asimismo, puede percatarse que la información por año está en cada fila. Usted puede usar cualquier nombre para las columnas.

#Llamamos las librerias que se utilizaran import pandas as pd import os from selenium import webdriver # Nos permite navegar en la web import re import time import unidecode from selenium.webdriver.support.ui import Select from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import NoSuchElementException from tqdm import tqdm from selenium.webdriver.common.action_chains import ActionChains from webdriver_manager.chrome import ChromeDriverManager # simulador de webdriver from webdriver_manager.chrome import ChromeDriverManager import warnings warnings.filterwarnings('ignore') # eliminar warning messages
os.getcwd()
'C:\\Users\\DELL\\Documents\\GitHub\\My-scripts\\Mis tareas\\FINAL'
#Driver de Chrome driver_infojuntos = webdriver.Chrome("chromedriver.exe") # El browser del buscador se llama drive-infojuntos driver_infojuntos.maximize_window() #Definimos el link de nuestra página link = 'http://www2.juntos.gob.pe/infojuntos/' driver_infojuntos.get( link )
driver_infojuntos.save_screenshot('imagen_web.png') #Guardar captura de pantalla
True
#Adjunto se puede ser una captura de la página a la cual accedimos a travès del link from PIL import Image img1 = Image.open("imagen_web.png") img1
Image in a Jupyter notebook
#Hacer click en boton VRAEM arriba a la izquierda #Para ello, accedemos a través de la ruta (XPATH) en la cual el tag es 'a' y su ref= indexv.html select_vraem = driver_infojuntos.find_element(By.XPATH, "//a[@href='indexv.html']") select_vraem.click()
#Otra forma para hacer click puede ser: #WebDriverWait(driver_infojuntos, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@href='indexv.html']"))).click()
#2014 #Seleccionar el año select_year = driver_infojuntos.find_element(By.XPATH, "//option[@value='2014']") select_year.click()
#Otra forma para este misma accion puede ser: #WebDriverWait(driver_infojuntos, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='2014']"))).click()
#Exportar cuadro select_button_exp = driver_infojuntos.find_element(By.XPATH, "//a[@href='datos/exp_nacional.php?cod=00&anho=2014']") select_button_exp.click()
#2015 #Seleccionar el año select_year = driver_infojuntos.find_element(By.XPATH, "//option[@value='2015']") select_year.click()
#Exportar cuadro select_button_exp = driver_infojuntos.find_element(By.XPATH, "//a[@href='datos/exp_nacional.php?cod=00&anho=2015']") select_button_exp.click()
#2016 #Seleccionar el año select_year = driver_infojuntos.find_element(By.XPATH, "//option[@value='2016']") select_year.click()
#Exportar cuadro select_button_exp = driver_infojuntos.find_element(By.XPATH,"//a[@href='datos/exp_nacional.php?cod=00&anho=2016']") select_button_exp.click()
#2017 #Seleccionar el año select_year = driver_infojuntos.find_element(By.XPATH, "//option[@value='2017']") select_year.click()
#Exportar cuadro select_button_exp = driver_infojuntos.find_element(By.XPATH, "//a[@href='datos/exp_nacional.php?cod=00&anho=2017']") select_button_exp.click()
#2018 #Seleccionar el año select_year = driver_infojuntos.find_element(By.XPATH, "//option[@value='2018']") select_year.click()
#Exportar cuadro select_button_exp = driver_infojuntos.find_element(By.XPATH, "//a[@href='datos/exp_nacional.php?cod=00&anho=2018']") select_button_exp.click()
#2019 #Seleccionar el año select_year = driver_infojuntos.find_element(By.XPATH, "//option[@value='2019']") select_year.click()
#Exportar cuadro select_button_exp = driver_infojuntos.find_element(By.XPATH, "//a[@href='datos/exp_nacional.php?cod=00&anho=2019']") select_button_exp.click()
#2020 #Seleccionar el año select_year = driver_infojuntos.find_element(By.XPATH, "//option[@value='2020']") select_year.click()
#Exportar cuadro select_button_exp = driver_infojuntos.find_element(By.XPATH, "//a[@href='datos/exp_nacional.php?cod=00&anho=2020']") select_button_exp.click()
#2021 #Seleccionar el año select_year = driver_infojuntos.find_element(By.XPATH, "//option[@value='2021']") select_year.click()
#Exportar cuadro select_button_exp = driver_infojuntos.find_element(By.XPATH, "//a[@href='datos/exp_nacional.php?cod=00&anho=2021']") select_button_exp.click()
#Ahora, importamos los excel que se descargaron. #Empezando por el 2014 df = pd.read_excel("Detalle.xlsx", header=2) #Indicamos el nombre del archivo y la fila donde se encuentran los encabezados en este caso, la 3era fila df
df.rename(columns = {'Unnamed: 0':'Categoría'}, inplace = True) #cambiamos el nombre de la columna df.rename(columns = {'ANUAL':'2014'}, inplace = True) #cambiamos el nombre de la columna
#Filtramos nuestra nueva base para que solo tenga el año y las categorías df1=df[['Categoría','2014']] df1
df1.drop(df1[(df1['Categoría'] =='FUENTE: UPP-JUNTOS')].index, inplace=True) #eliminamos la fila que no entrará en el cuadro final
df1
df2= df1.T #De esta forma cambiamos las filas por columnas de un dataframe df2
#Cambiamos el encabezado de nuestra base, para que empiece desde la 2da fila df2.columns = df2.iloc[0] df2 = df2[1:] df2.head()
df_2014=df2
#Realizamos el mismo proceso con los archivos de los demas años(2015-2021) df_2015 = pd.read_excel("Detalle(1).xlsx", header=2) df_2016 = pd.read_excel("Detalle(2).xlsx", header=2) df_2017 = pd.read_excel("Detalle(3).xlsx", header=2) df_2018 = pd.read_excel("Detalle(4).xlsx", header=2) df_2019 = pd.read_excel("Detalle(5).xlsx", header=2) df_2020 = pd.read_excel("Detalle(6).xlsx", header=2) df_2021 = pd.read_excel("Detalle(7).xlsx", header=2) #Modificaciones para 2015 df_2015.rename(columns = {'Unnamed: 0':'Categoría'}, inplace = True) #cambiamos el nombre de la columna df_2015.rename(columns = {'ANUAL':'2015'}, inplace = True) #cambiamos el nombre de la columna df_2015=df_2015[['Categoría','2015']] df_2015.drop(df_2015[(df_2015['Categoría'] =='FUENTE: UPP-JUNTOS')].index, inplace=True) df_2015= df_2015.T df_2015.columns = df_2015.iloc[0] df_2015 = df_2015[1:] #Modificaciones para 2016 df_2016.rename(columns = {'Unnamed: 0':'Categoría'}, inplace = True) #cambiamos el nombre de la columna df_2016.rename(columns = {'ANUAL':'2016'}, inplace = True) #cambiamos el nombre de la columna df_2016=df_2016[['Categoría','2016']] df_2016.drop(df_2016[(df_2016['Categoría'] =='FUENTE: UPP-JUNTOS')].index, inplace=True) df_2016= df_2016.T df_2016.columns = df_2016.iloc[0] df_2016 = df_2016[1:] #Modificaciones para 2017 df_2017.rename(columns = {'Unnamed: 0':'Categoría'}, inplace = True) #cambiamos el nombre de la columna df_2017.rename(columns = {'ANUAL':'2017'}, inplace = True) #cambiamos el nombre de la columna df_2017=df_2017[['Categoría','2017']] df_2017.drop(df_2017[(df_2017['Categoría'] =='FUENTE: UPP-JUNTOS')].index, inplace=True) df_2017= df_2017.T df_2017.columns = df_2017.iloc[0] df_2017 = df_2017[1:] #Modificaciones para 2018 df_2018.rename(columns = {'Unnamed: 0':'Categoría'}, inplace = True) #cambiamos el nombre de la columna df_2018.rename(columns = {'ANUAL':'2018'}, inplace = True) #cambiamos el nombre de la columna df_2018=df_2018[['Categoría','2018']] df_2018.drop(df_2018[(df_2018['Categoría'] =='FUENTE: UPP-JUNTOS')].index, inplace=True) df_2018= df_2018.T df_2018.columns = df_2018.iloc[0] df_2018 = df_2018[1:] #Modificaciones para 2019 df_2019.rename(columns = {'Unnamed: 0':'Categoría'}, inplace = True) #cambiamos el nombre de la columna df_2019.rename(columns = {'ANUAL':'2019'}, inplace = True) #cambiamos el nombre de la columna df_2019=df_2019[['Categoría','2019']] df_2019.drop(df_2019[(df_2019['Categoría'] =='FUENTE: UPP-JUNTOS')].index, inplace=True) df_2019= df_2019.T df_2019.columns = df_2019.iloc[0] df_2019 = df_2019[1:] #Modificaciones para 2020 df_2020.rename(columns = {'Unnamed: 0':'Categoría'}, inplace = True) #cambiamos el nombre de la columna df_2020.rename(columns = {'ANUAL':'2020'}, inplace = True) #cambiamos el nombre de la columna df_2020=df_2020[['Categoría','2020']] df_2020.drop(df_2020[(df_2020['Categoría'] =='FUENTE: UPP-JUNTOS')].index, inplace=True) df_2020= df_2020.T df_2020.columns = df_2020.iloc[0] df_2020 = df_2020[1:] #Modificaciones para 2021 df_2021.rename(columns = {'Unnamed: 0':'Categoría'}, inplace = True) #cambiamos el nombre de la columna df_2021.rename(columns = {'ANUAL':'2021'}, inplace = True) #cambiamos el nombre de la columna df_2021=df_2021[['Categoría','2021']] df_2021.drop(df_2021[(df_2021['Categoría'] =='FUENTE: UPP-JUNTOS')].index, inplace=True) df_2021= df_2021.T df_2021.columns = df_2021.iloc[0] df_2021 = df_2021[1:]
df_2021
#Realizamos un append de las bases de datos ya modificadas df_final= df_2014.append(df_2015) df_final= df_final.append(df_2016) df_final= df_final.append(df_2017) df_final= df_final.append(df_2018) df_final= df_final.append(df_2019) df_final= df_final.append(df_2020) df_final= df_final.append(df_2021) df_final
df_final.columns #Verificar el nombre de todas las columnas (es importante ver si hay espacios o caracteres adicionales que dificulten realizar filtros o llamar a columnas)
Index(['  Departamentos atendidos', '  Provincias Atendidas', '  Distritos Atendidos', '  CCPP con hogares afiliados', '  Hogares afiliados', '  CCNN con hogares afiliados', '  CCPP con hogares abonados', '  Hogares abonados', ' Establecimientos de Salud', ' Instituciones Educativas', '  Transferencia S/.'], dtype='object', name='Categoría')
df_final.drop(df_final.columns[[8, 9]], axis=1, inplace=True) #Eliminamos las columnas innecesarias
#Nuestra base de datos final: df_final