David Hernández
Desarrollador en Political Watch
Political Watch es una fundación donde desarrollamos herramientas de transparencia y rendición de cuentas para conseguir un mundo más justo.
david.hernandez@politicalwatch.es
@David_Baltha
Conocimientos necesarios previos
Scraping con Google Sheets
Explotando los datos mediante herramientas No Code
Muchos portales de datos abiertos los datos no usan los formatos adecuados y simplemente están incrustados en la propia página web.
Aunque podemos copiar y pegar la información que nos interese, puede ser un problema dependiendo del volumen. Para rescatar dicha información de una manera más automática se usa una técnica denominada Web Scraping.
La web se construye utilizando un lenguaje llamado HTML. Por tanto, la técnica consiste en obtener dicho código HTML y procesarlo para extraer el contenido que nos interesa, reduciendo el tiempo que necesitamos para extraer dicha información.
Para ser capaces de aplicar el Web Scraping, tenemos que conocer un mínimo de como funciona el HTML y como podemos procesarlo. Y para entender HTML, necesitamos conocer antes XML.
El XML es un metalenguaje que define una estructura para crear lenguajes. El formato es el siguiente:
<etiqueta atributo="valor">Contenido</etiqueta>
El contenido puede ser otras etiquetas o simplemente texto, pudiendo generar una estructura anidada:
<madre atributo="valor">
<hija></hija>
</madre>
<Contrato>
<IssueDate>2021-04-08+02:00</IssueDate>
<ContractingParty type="Administración Local">Ayuntamiento de Sanchidrián</ContractingParty>
<Project>
<Description>La actuación consistirá en la construcción de un edificio...</Description>
<EstimatedContractAmount currency="EUR">356820.52</EstimatedContractAmount>
</Project>
</Contrato>
Como hemos dicho antes, XML es un metalenguaje que nos permite definir lenguajes. HTML es un lenguaje definido mediante XML.
Al contrario que con XML que puedes usar cualquier texto para las etiquetas y los atributos, HTML tiene una especificación de que etiquetas y atributos puedes usar.
Estas etiquetas definen la estructura y el contenido de una pagina web: los enlaces, los textos, las tablas...
Enlace:
<a href="https://politicalwatch.es">Political Watch</a>
Imagen:
<img src="http://www.upv.es/imagenes/marcaUPVN1.png"></img>
Lista:
<ul>
<li>Elemento 1</li>
<li>Elemento 2</li>
</ul>
XPath es un formato que nos permite identificar cualquier etiqueta del HTML o XML. Por ejemplo, dada la siguiente estructura:
Seleccionar todos los enlaces:
<html>
<a class="menu" href=""></a>
<div>
<a class="link" href=""></a>
</div>
</html>
//a
Seleccionar el div:
/html/div
Seleccionar segundo enlace:
//a[2]
Usando atributos:
//a[@class="link"]
<html>
<a class="menu" href=""></a>
<div>
<a class="link" href=""></a>
</div>
</html>
/html//a[@class="link"]
En la ventana del navegador, usamos F12 o botón derecho e inspeccionar
Nos permite importar los datos de las tablas de una web
=IMPORTHTML(url, "table", index)
Nos permite importar los datos de las listas de una web
=IMPORTHTML(url, "list", index)
Nos permite importar los datos de cualquier documento que use el formato XML
IMPORTXML(url, query)
Nos permite importar los datos de un feed RSS
IMPORTFEED(url, query, headers, num_items)
Nos permite importar los datos de cualquier documento CSV
IMPORTDATA(url)
Páginas cuyo contenido cambia dinámicamente
Páginas cuya URL no dirija a un único contenido
Cuando el contenido esta en una imagen o documento no HTML
Cuando necesitamos iniciar sesión.
Cuando el HTML no es "estable" y cambia con frecuencia (Google)
Es una herramienta abierta y gratuita de automatización de flujos.
Te permite conectar servicios web con otros servicios. Por ejemplo: un formulario de TypeForm con una hoja de calculo de Google o un Feed RSS con el envío de un correo.
Vamos a hacer un bot de telegram que publique los contratos públicos.
Conectaremos una pieza de leer un feed RSS.
A continuación, usaremos otro bloque para seleccionar el ultimo contrato.
Y conectaremos ese bloque con otro de Telegram para mandarlo a un chat de difusión.
Antes de poder empezar, necesitamos crear un bot de telegram. Para ello, tenemos que hablar con el @BotFather:
Lo primero que necesitamos es el token:
Invitamos al bot al canal como administrador y accedemos a la siguiente URL:
https://api.telegram.org/bot<Token>/getUpdates
Vamos a la instalación de N8N:
https://n8n.politicalwatch.es
Usuario: upv
Password: agentesod4d
Cada pieza de nuestro puzle es un nodo y el puzle completo es un workflow.
Desde la cruz superior derecha, añadimos nuevos nodos.
Los nodos de tipo Trigger son los que inician nuestro worflow.
El trigger "start" ejecuta el workflow cuando se lo pedimos nosotros.
El trigger "cron" nos permite iniciar el workflow periódicamente
Los nodos normales son los que realizan las diferentes operaciones.
Desde la cruz superior derecha, añadimos nuevos nodos.
Para nuestro bot, usaremos tres regular nodes:
- RSS Feed Read: descarga los datos de un feed RSS.
- SplitInBatches: coge la primera entrada del feed.
- Telegram: Formatea los datos y los envía por Telegram.