OpenWebinars

Herramientas

Cómo hacer Web Scraping con Selenium

En esta práctica te mostramos cómo se realiza web scraping utilizando la librería Selenium.

Rafael Zambrano

Rafael Zambrano

EXPERTO EN ANÁLISIS DE DATOS

Lectura 1 minutos

Publicado el 21 de junio de 2019

Compartir

    Tabla de contenidos

Qué es Selenium

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/.

Práctica de web scraping con Selenium

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.

Imagen 0 en ¿Cómo hacer Web Scraping con Selenium?

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.

 

Compartir este post

También te puede interesar

Icono de la tecnología
Curso

Web scraping

Intermedio
4 h. y 4 min.

Si quieres aprender cómo hacer web scraping con Python de forma sencilla, puedes comenzar realizando este completo curso...

Rafael Zambrano
4.5