Salta el contingut

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

  1. HTTP Request - Extracció
  2. URL: http://books.toscrape.com/
  3. Method: GET

  4. HTML Extract

  5. Configurar selectors CSS per a:

    • Títol del llibre
    • Preu
    • Rating
    • Disponibilitat
  6. Function - Processament

    const items = $input.all();
    
    return items.map(item => {
      const preu = parseFloat(item.json.preu.replace('£', ''));
      const rating = item.json.rating;
    
      return {
        json: {
          titol: item.json.titol,
          preu: preu,
          rating: rating,
          categoria: 'Llibres',
          assequible: preu < 30 ? 'Sí' : 'No'
        }
      };
    });
    

  7. Aggregate - Estadístiques

  8. Calcular preu mitjà
  9. Preu màxim i mínim
  10. Comptar per rating

  11. Output

  12. Enviar resultats per email
  13. 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

  1. Webhook Trigger
  2. Path: /dades-sensor
  3. Method: POST
  4. Configurar resposta personalitzada

  5. 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()
        }
      };
    });
    

  6. IF - Alerta de temperatura

  7. Condició: temperatura > 80
  8. True: enviar alerta
  9. False: continuar

  10. PostgreSQL - Emmagatzemar

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