Programació del WebScraping

Xatbot · WebScraping · Hiba Kadat · SMX

El Xatbot · Evolució Arquitectural · WebScraping

Del sistema manual al
WebScraping Automàtic

Millora estructural profunda del Xatbot: canvi de paradigma d’una arquitectura estàtica basada en JSON a un sistema dinàmic de WebScraping recursiu integrat directament amb el model d’IA Gemini.

Python WebScraping BeautifulSoup Gemini API Crawler Recursiu Arquitectura Modular
01

Canvi de paradigma

Introducció

Aquesta evolució suposa un canvi de paradigma: s’ha passat d’un sistema estàtic basat en dades manuals (JSON) a una arquitectura dinàmica basada en WebScraping recursiu, amb integració directa amb un model d’IA (Gemini). Això transforma el sistema en un ecosistema més autònom, escalable i proper a una arquitectura professional real.

02

Arquitectura anterior: sistema JSON

Sistema anterior · JSON estàtic
Dependència total de manteniment manual
Cada nova informació s’havia d’introduir manualment
Errors de format podien trencar tot el sistema
Sense sincronització amb el portafolis real
No reflectia canvis en temps real
No escalable — model no coherent amb sistemes moderns
Nova arquitectura · WebScraping
Sistema automatitzat i dinàmic
Adquisició automàtica de dades del portafolis
Errors gestionats amb Try-Except i Timeout
Sincronització automàtica en temps real
Reflecteix els canvis del web immediatament
Escalable i modular — arquitectura professional
03

Crawler recursiu: adquisició de dades

Flux de funcionament del crawler

El crawler actua com un mòdul d’adquisició automàtica de dades, responsable de recórrer el portafolis i construir una representació completa del seu contingut.

🌐
Inici
Petició HTTP
Al portafolis principal
📄
Anàlisi
Pàgines seqüencials
Lectura de cada URL
🔗
Extracció
Enllaços interns
Descobriment recursiu
🔄
Recursió
Control duplicats
Pàgines visitades
Fi
Límit de profunditat
Dataset complet
crawler.py — WebScraping recursiu
Python
def crawl_website(base_url, max_pages=20): visited = set() content = [] def scrape_page(url): if url in visited or len(visited) >= max_pages: return visited.add(url) try: response = requests.get(url, timeout=8) soup = BeautifulSoup(response.text, 'html.parser') # Extracció de text net (sense navegació ni botons) text = soup.get_text(separator=' ', strip=True) content.append(text) # Recorre els enllaços interns recursivament for link in soup.find_all('a', href=True): href = link['href'] if base_url in href: scrape_page(href) except Exception as e: print(f"Error: {e}") # Continua sense trencar el sistema scrape_page(base_url) return ' '.join(content)
04

BeautifulSoup: filtratge i neteja

Capa de processament del contingut HTML

Per garantir la qualitat de les dades, s’utilitza BeautifulSoup com a capa de processament i neteja del contingut HTML. Aquesta etapa és fonamental perquè assegura que el model d’IA no rebi soroll (noise), sinó dades estructurades i rellevants.

🔍
Separació HTML / contingut real
Elimina tota l’estructura HTML i extreu únicament el contingut textual visible i rellevant de cada pàgina.
Data Cleaning
🗑
Eliminació d’elements no rellevants
Filtra elements de navegació, botons, menús i decoració visual que no aporten informació útil al model d’IA.
Noise Reduction
📊
Dades estructurades per a la IA
El resultat final és un dataset de text net i estructurat que permet al model Gemini generar respostes més precises i contextualitzades.
Data Quality
05

Robustesa: gestió d’errors

Gestió d’excepcions (Try-Except)
Encapsula possibles errors de connexió o lectura de pàgines. Evita la fallada total del sistema per errors puntuals i permet la continuïtat del flux de dades.
Fault Tolerance
Control de temps (Timeout)
Límit de temps de resposta per evitar bloquejos del crawler. Prevé bloquejos indefinits, millora l’eficiència i optimitza el rendiment del procés de scraping.
Performance
error_handling.py — gestió d’errors i timeout
Python
try: # Petició amb timeout de 8 segons response = requests.get(url, timeout=8) response.raise_for_status() # Processament del contingut soup = BeautifulSoup(response.text, 'html.parser') text = soup.get_text(separator=' ', strip=True) except requests.exceptions.Timeout: print(f"Timeout: {url} — continuant...") except requests.exceptions.ConnectionError: print(f"Error de connexió: {url} — continuant...") except Exception as e: print(f"Error inesperat: {e}") # El sistema continua sense interrompre's
06

Integració FrontEnd–BackEnd–IA

Arquitectura de capes

Un cop finalitzat el WebScraping, el sistema genera una variable de text estructurat que flueix a través de les capes de l’arquitectura fins arribar a l’usuari final.

🐍
BackEnd
Python + Crawler
Obté i processa les dades del web
🔧
Capa Intermèdia
BS4 + Filtratge
Estructura i neteja la informació
🤖
Model IA
Gemini API
Processa i genera respostes
💬
FrontEnd
Widget de xat
Mostra respostes a l’usuari

Problemes reals resolts

Durant la integració s’han resolt problemes reals: errors de CORS en la comunicació entre client i servidor, filtrat de recursos no compatibles (imatges, PDFs), i optimització del flux de dades cap al model d’IA.

07

Seguretat: protecció de les API keys

🔐
API keys exclusivament al BackEnd
Les claus d’API (Gemini i serveis externs) es gestionen exclusivament al BackEnd, evitant qualsevol exposició al codi client. El FrontEnd mai no accedeix directament a dades sensibles ni a claus d’API.
Bones pràctiques · Seguretat
🛡
Separació FrontEnd / BackEnd obligatòria
Evita filtracions de credencials, impedeix l’ús indegut de serveis externs i compleix les bones pràctiques de seguretat en desenvolupament web professional.
OWASP · Best Practices
08

Justificació global: arquitectura de sistema

Conceptes d’enginyeria de software introduïts

📦
Separació de responsabilitats
Crawler / processament / IA / interfície — cada capa té una responsabilitat única i ben definida.
Automatització del flux de dades
El sistema és autònom en l’adquisició i processament, sense intervenció manual en el cicle de vida de les dades.
📈
Escalabilitat i modularitat
Cada mòdul es pot ampliar o substituir de forma independent, garantint l’escalabilitat del sistema.
10

Conclusions finals

Aquesta evolució del Xatbot representa una transició cap a una arquitectura molt més propera a sistemes professionals reals. El canvi de sistema manual i estàtic a sistema automatitzat, dinàmic i escalable és el punt central d’aquesta millora.

El projecte no només millora el rendiment del Xatbot, sinó que demostra la comprensió de principis fonamentals d’arquitectura de sistemes moderns: separació de responsabilitats, automatització del flux de dades, robustesa davant errors, seguretat de credencials i escalabilitat.

🤖
Autònom
Adquisició automàtica de dades
🔐
Segur
Gestió segura de credencials
Robust
Tolerant a errors de xarxa
📈
Escalable
Arquitectura modular
🧩
Integrat
IA connectada de forma estructurada
PRO+
Arquitectura professional real