Cómo hacer Web Scraping con Python
Descubre cómo poder realizar web scraping de una forma sencilla empleando Python.
En esta práctica te mostramos cómo se realiza web scraping utilizando la librería Selenium.
Tabla de contenidos
El web scraping consiste en extraer datos de la web, y la librería Selenium lo que permite es automatizar navegadores web.
Es una herramienta bastante potente que nos permite utilizar un navegador web como si fuese un humano.
Para poder utilizarlo en Python es necesario disponer de un driver, que podemos descargar para Chrome o Firefox desde http://chromedriver.chromium.org/downloads, y también es interesante conocer la documentación, que es bastante completa y muestra bastantes casos prácticos, la cual podemos consultar en https://selenium-python.readthedocs.io/.
En este ejemplo vamos a extraer datos de esta web, que contiene información climática en diversas estaciones meteorológicas en toda España.
Para acceder a los datos tenemos que rellenar un formulario, elegir una estación meteorológica, las fechas que se quieren consultar, los parámetros que se quieren obtener y hacer clic en “Consultar Datos”.
Estos datos nos aparecen en una nueva pestaña, pero las URLs nunca cambian, siempre son las mismas, por lo que prácticamente la única forma de acceder a esos datos es emulando el comportamiento humano con un programa.
Esto lo haremos instalando la librería Selenium desde nuestro IDE:
#Instalación de la librería Selenium
import sys
!{sys.executable} -m pip install -U selenium
A continuación vamos a generar la petición, para lo que necesitamos el driver chromedriver.exe, el ejecutable del navegador, indicamos la URL de la página dónde debe acceder y finalmente indicamos todo lo que tiene que hacer dentro de la misma.
Esto lo hacemos de esta forma:
#!/usr/bin/env Python
# -*- coding: utf-8 -*-
# Scrapper de las estaciones de la red SIAR
print(‘Iniciando Scraper’)
import zipfile
import os
import selenium viewport webdriver
form selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome(“chromedriver.exe”)
driver.get(‘http://eportal.mapama.gob.es/websiar/SeleccionParametrosMap.aspx?dst=1’)
value_ccaa=8 # Comundad autónoma
value_ccaa_string = str(value_ccaa)
string_ccaa = ‘select[name=’ctl00$ContentPlaceHolder1$DropDownListCCAA”] option[value=”’+value_ccaa_….
desplegable_ccaa = driver.find_element_by_css_selector(string_ccaa)
click_desplegable_ccaa = desplegable_ccaa.click()
time.sleep(2)
value_prov=50 # Provincia
value_prov_string = str(value_prov)
string_prov = ‘select[name=”ctl00$ContentPlaceHolder1$DropDownListProvincia”] option[value=”’+value ….
desplegable_prov = driver.find_element_by_css_selector(string_prov)
click_desplegable_ prov = desplegable_prov.click()
time.sleep(2)
value_est=2 # Estación
value_est_string = str(value_prov)
string_ est = ‘select[name=”ctl00$ContentPlaceHolder1$DropDownListEstacion”] option[value=”’+value ….
desplegable_ est = driver.find_element_by_css_selector(string_est)
click_desplegable_prov = desplegable_est.click()
time.sleep(5)
agregar_estacion = driver.find_element_by_css_selector(‘input[name= ctl00$Content…
click_agregar_estacion=agregar_estacion_click()
time.sleep(0.5)
driver.find_element_by_id(‘txtFechaIni’).clear() # Borra la fecha de inicio por…
time.sleep(0.5)
driver.find_element_by_id(‘txtFechaFin’).clear() # Borra la fecha fin por defecto…
time.sleep(2)
imputElement = driver.find_element_by_id(“txtFechaIni”)
imputElement.send_keys(‘10/11/2018’) # Fecha de Inicio
time.sleep(2)
imputElement = driver.find_element_by_id(“txtFechaFin”)
imputElement.send_keys(‘15/11/2018’) # Fecha de Fin
time.sleep(2)
consultar_datos_button = driver.find_element_by_css_selector(‘input[name=”…
consultar_datos = consultar_datos_button_click()
time.sleep(2)
driver.swith_to.window(driver.window_handless[1])
exportar_csv_link = driver.find_element_by_css_selector(‘a[id=”ContentPlaceHolder…
descargar_csv = exportar_csv_link.click()
time.sleep(2)
driver.quit() #Cierra el navegador
zip_ref =zipfile.ZipFile(get_download_path()+’/InformeDatos.zip’, ‘r’ # Carga…
zip_ref.extractall(“Resultados/”) # Extrae el zip a la carpeta Resultados
zip_ref.close()
os.remove(get_download_path()+’/InformeDatos.zip’) # Borra el archivo ‘ImportaDatos’…
Para indicar lo que debe hacer dentro de la página, tenemos que inspeccionar los elementos para ver a qué corresponde cada parte del formulario.
Por ejemplo la Comunidad Autónoma al darle clic a Inspeccionar en el navegador, nos aparece la parte del código fuente de este desplegable, del que nos interesa el nombre del mismo. Además si desplegamos ese código, podemos ver todos los posibles valores que puede tener.
De esta forma podemos indicar los valores de las Comunidades que queremos consultar, y hacemos lo mismo con el resto de elementos, la provincia, la estación, las fechas y al final nos descargamos los resultados.
Si ejecutamos ese código, se abre el navegador y va a realizar todos los pasos que le hemos indicado en el código, y es el propio código Python el que irá rellenando el formulario con los parámetros indicados, el que descargará los datos, y finalmente cerrará el navegador.
Conviértete en un experto del web scrapping, aprende cómo extraer datos de sitios web utilizando Python como lenguaje de programación.
También te puede interesar
Descubre cómo poder realizar web scraping de una forma sencilla empleando Python.
Si quieres aprender cómo hacer web scraping con Python de forma sencilla, puedes comenzar realizando este completo curso...