Web scraping con Python: Imitando el resultado de R¶
En un post anterior titulado [Web scraping + Visualización con R: ejemplo con datos de wikipedia] (http://r-econ.blogspot.com/2020/06/web-scraping-visualizacion-con-r.html) mostré la facilidad con la que se pueden extraer datos de la web con R, principalmente, con el paquete rvest
, en este post mostraré cómo hacer lo mismo usando la funciónread_html()
de pandas
. Las tablas que vamos a extraer son las mismas que en el post anterior.
import pandas as pd
departamentos=pd.read_html("https://es.wikipedia.org/wiki/Anexo:Departamentos_de_Nicaragua")
len(departamentos)
Dado que el resultado de pd.read_html
es una lista de data.frames, entonces se requiere inspeccionar el tamaño de la lista para ubicar el data.frame de interés. En nuestro caso, como solo se trata de una tabla, la longitud de la lista es 1, por tanto, para obtener nuestra tabla basta con seleccionarla de la lista:
departamentos[0]
Ahora sólo falta importar la tabla que contiene los IDH que está en esta dirección https://es.wikipedia.org/wiki/Anexo:Departamentos_de_Nicaragua_por_IDH
idh1=pd.read_html("https://es.wikipedia.org/wiki/Anexo:Departamentos_de_Nicaragua_por_IDH", thousands=".", decimal=",")
len(idh1)
En este caso, el resultado es una lista de longitud 2, usted puede comprobar que nuestra tabla de interés está en la posición 2. Puede hacer departamentos_idh_1[0]
y departamentos_idh_1[1]
para comprobar dónde está la tabla. Tal como en el caso del post anterior, nuestra tabla tiene ciertos inconvenientes, los cuales podemos arreglar fácilmente.
idh1[1].head(6)
import re
import numpy as np
idh2 = idh1[1].copy()
idh2 = idh2.rename(columns = {'Unnamed: 6':'IDH_categoría'})
idh2["IDH_categoría"] = idh2["IDH"]
idh2 = idh2.replace({"IDH_categoría":r"\d"}, {"IDH_categoría":""}, regex=True)
idh2 = idh2.replace({"IDH_categoría":r"Desarrollo|Humano"}, {"IDH_categoría":""}, regex=True)
idh2["IDH_categoría"][idh2["IDH_categoría"]=="."] = np.NaN
idh2["IDH_categoría"]=idh2.IDH_categoría.fillna(method='ffill')
idh2 = idh2[~idh2.Puesto.str.startswith("Desarrollo")] # eliminando filas no deseadas
idh2['Población'] = idh2['Población'].astype(float)
idh2['IDH'] = idh2['IDH'].astype(float)
idh2["Población_porcentaje"] = (idh2.Población/idh2.Población.sum())*100
idh2.reset_index()
Finalmente hemos conseguido obtener las mismas tablas que en el post anterior.
No hay comentarios:
Publicar un comentario