Pràctica 6: Web Scraping i Dades en Temps Real
Objectiu
Extreure dades d'una pàgina web, processar-les i generar estadístiques.
Descripció
Crear un workflow que extregui informació de productes d'una botiga online (ex: Books to Scrape) i analitzi preus.
Passos
- HTTP Request - Extracció
- URL:
http://books.toscrape.com/ -
Method: GET
-
HTML Extract
-
Configurar selectors CSS per a:
- Títol del llibre
- Preu
- Rating
- Disponibilitat
-
Function - Processament
-
Aggregate - Estadístiques
- Calcular preu mitjà
- Preu màxim i mínim
-
Comptar per rating
-
Output
- Enviar resultats per email
- O desar en CSV
Lliurables
- Workflow complet
- CSV amb les dades extretes
- Document amb anàlisi de resultats
Pipeline de Dades en Temps Real
Objectiu
Crear un pipeline que processi dades en temps real mitjançant webhooks.
Descripció
Simular un sistema d'esdeveniments que rep dades de sensors IoT, les valida i emmagatzema.
Part A: Crear webhook receptor
- Webhook Trigger
- Path:
/dades-sensor - Method: POST
-
Configurar resposta personalitzada
-
Function - Validació
const items = $input.all(); return items.map(item => { const data = item.json; // Validar estructura if (!data.sensor_id || !data.temperatura || !data.timestamp) { throw new Error('Dades incompletes'); } // Validar rangs if (data.temperatura < -50 || data.temperatura > 100) { throw new Error('Temperatura fora de rang'); } return { json: { ...data, validat: true, processat_a: new Date().toISOString() } }; }); -
IF - Alerta de temperatura
- Condició: temperatura > 80
- True: enviar alerta
-
False: continuar
-
PostgreSQL - Emmagatzemar
- Insert a taula
lectures_sensors
Part B: Crear script de prova
Fitxer test_webhook.py:
import requests
import json
import random
import time
from datetime import datetime
webhook_url = "http://localhost:5678/webhook/dades-sensor"
def generar_dades_sensor():
return {
"sensor_id": f"SENSOR_{random.randint(1, 10)}",
"temperatura": round(random.uniform(20, 90), 2),
"humitat": round(random.uniform(30, 80), 2),
"timestamp": datetime.now().isoformat()
}
# Enviar 10 esdeveniments
for i in range(10):
dades = generar_dades_sensor()
resposta = requests.post(webhook_url, json=dades)
print(f"Esdeveniment {i+1}: {resposta.status_code} - Temp: {dades['temperatura']}°C")
time.sleep(2)
Lliurables
- Workflow amb webhook
- Script de prova Python
- Captures de dades rebudes
- Anàlisi d'alertes generades