Web Scraping Con Python Ejemplo

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

Web scraping con python ejemplo

July 31, 2022

En este corto paper veremos como recrear en python el ejercicio de web scraping visto en r:
https://www.linkedin.com/pulse/practica-de-rstudio-graficos-animados-juan-lastra/
usaremos la misma pagina web y buscamos los mismos resultados, es decir un grafico animado que
muestra como avanza el salario minimo colombiano; recordemos las caracteristicas de esta pagina
web:
https://www.salariominimocolombia.net/historico/
esta nos mostraba el año y el salario minimo de dicho año; nuestro objetivo es obtener los datos de
la pagina web limpiarlos y mostrarlos de una mejor manera.
para comenzar debemos tener instalados los siguientes paquetes:
• request
• pandas
• matplotlib

0.1 paso 1
Como sucedia en R nuestro objetivo es guardar toda la información que contiene la pagina web
en un dataframe, para ello utilizaremos la función requests.get() del paquete requests y el metodo
content para analizar la url y el contenido que esta tiene.
luego dicho contenido lo aplicaremos a la función read_html del paquete pandas esto guardara en
una especie de lista todas las tablas que puede contener la pagina web; en nuestro caso las guarda
dentro de la variable df. recordemos que buscamos obtener la primera y unica tabla que existe, asi
que seleccionamos de la lista df el primer objeto es decir el 0.
[216]: ## importar paquetes necesarios

import requests
import pandas as pd
import matplotlib.pyplot as plt

## ignorar las advertencias


import warnings
warnings.filterwarnings('ignore')
warnings.simplefilter('ignore')

### convertir table de pagina web en un dataframe.

1
url = "https://www.salariominimocolombia.net/historico/"
html = requests.get(url).content
df = pd.read_html(html)
df = df[0]

## vemos las primeras 5 obs


df.head(5)

[216]: Año Salario Mínimo(Pesos Colombianos) Acción


0 Salario Mínimo 2023 Por definir Más
1 Salario Mínimo 2022 $ 1,000,000 Más
2 Salario Mínimo 2021 $ 908,526 Más
3 Salario Mínimo 2020 $ 877,803 Más
4 Salario Mínimo 2019 $ 828,116 Más

0.2 limpieza de los datos


Estos datos obtenidos no pueden ser utilizados de manera inmediata para nuestro objetivo. por lo
tanto debemos limpiarlos y prepararlos para nuestro proposito.
lo primero que haremos sera eliminar las columnas mas problematicas; en este caso serian las
columnas “Año” y “Acción”, año porque resulta mas facil crear una secuencia de numeros para
reemplazarla, Acción no representa información alguna, al igual que la primera fila.
por ultimo cambiemos el nombre de la columna que contiene el salario. pues es demasiado extensa.
[217]: ## eliminar la columna Años y acción
df.drop(["Año", "Acción"], axis = 1, inplace = True)

## cambiar nombre de la columna salario


df = df.rename(columns={"Salario Mínimo(Pesos Colombianos)":"salario"})

## eliminar primera fila


df = df.drop(index = 0)

df.head()

[217]: salario
1 $ 1,000,000
2 $ 908,526
3 $ 877,803
4 $ 828,116
5 $ 781,242

Una vez hecho lo anterior, debemos volver a crear una variable que nos muestre el año, para el
momento de este articulo el ultimo año registrado es el 2022 y el año inicial recopilado es de 1984.
por lo tanto debemos crear una columna que vaya de 2022 a 1984.

2
[218]: años = list(range(2022, 1983, -1))

df["años"] = años

df.head()

[218]: salario años


1 $ 1,000,000 2022
2 $ 908,526 2021
3 $ 877,803 2020
4 $ 828,116 2019
5 $ 781,242 2018

tambien debemos concentrarnos en eliminar todos los caracteres de la columna salario que no sean
numericos, esto lo intentamos realizar con la primera expresión regular. funciona bastante bien para
hacer un acondicionamiento a lo que queremos sin embargo se resisten los caracteres “$” y la coma.
por eso hacemos los siguientes 2 replazos.
sin olvidarnos de definir el tipo de columna salario como entero.
[219]: df["salario"] = df.salario.str.replace('^[-+]?[0-9]+$', '')
df["salario"] = df.salario.str.replace('$', '')
df["salario"] = df.salario.str.replace(',', '')

df["salario"] = df["salario"].astype(int)
df.head()

[219]: salario años


1 1000000 2022
2 908526 2021
3 877803 2020
4 828116 2019
5 781242 2018

0.3 presentación grafica


Una vez tengamos nuestros datos de la forma ideal. vamos a presentarlo de una manera grafica
como lo hicimos en R.
[220]: plt.plot(df.años, df.salario)
plt.scatter(df.años, df.salario, c = "red")
plt.ticklabel_format(style='plain')
plt.grid()
plt.title("Salario minimo colombiano historico")
plt.xlabel("Año")
plt.ylabel("Salario")

3
[220]: Text(0, 0.5, 'Salario')

[ ]:

[ ]:

[ ]:

También podría gustarte