Come creare un sistema di logging delle visite di un sito web con Python

Creare un sistema di logging delle visite per un sito web è un aspetto cruciale per chiunque desideri monitorare l'attività degli utenti, raccogliere dati per analisi o migliorare l'esperienza utente. Python offre una vasta gamma di librerie e strumenti che facilitano questo processo. Di seguito, esploreremo come costruire un sistema di logging delle visite web usando Python, partendo da una semplice implementazione basata su file fino a soluzioni più avanzate che utilizzano database e strumenti di visualizzazione.

Il logging delle visite permette di:

  • Monitorare il traffico del sito in tempo reale.
  • Comprendere quali pagine e risorse sono più popolari.
  • Rilevare comportamenti insoliti, come attacchi o attività sospette.
  • Migliorare l'ottimizzazione per i motori di ricerca (SEO).
  • Creare report per capire l'andamento del sito e prendere decisioni strategiche.

Per ogni visita, è possibile registrare le seguenti informazioni:

  • Timestamp: l'ora in cui la visita è avvenuta.
  • Indirizzo IP: l'indirizzo IP del visitatore.
  • User-Agent: informazioni sul browser e il sistema operativo del visitatore.
  • Pagina visitata: l'URL della pagina visitata.
  • Referrer: la pagina da cui proviene il visitatore, utile per capire da dove arrivano i visitatori.

Per cominciare, possiamo creare un semplice sistema di logging basato su file, utilizzando la libreria logging di Python, che è potente e semplice da configurare.


import logging
from datetime import datetime

# Configurazione del logger
logging.basicConfig(
    filename='web_visits.log',
    level=logging.INFO,
    format='%(asctime)s - %(message)s',
)

def log_visit(ip_address, user_agent, page, referrer):
    # Logga la visita
    visit_data = f"IP: {ip_address}, Page: {page}, User-Agent: {user_agent}, Referrer: {referrer}"
    logging.info(visit_data)

# Esempio di utilizzo
log_visit("192.168.0.1", "Mozilla/5.0", "/home", "https://google.com")

In questo esempio, ogni volta che un utente visita una pagina, possiamo chiamare la funzione log_visit() con i parametri necessari. Il logger scriverà le informazioni in un file di log, aggiungendo automaticamente il timestamp.

Per siti con un traffico elevato, salvare i dati in un database è spesso una soluzione migliore, poiché rende più semplice analizzare i dati in seguito. In questo caso, possiamo usare SQLite per testare, oppure PostgreSQL o MySQL per implementazioni in produzione.

Ecco un esempio di come creare un database per il logging delle visite usando SQLite:


import sqlite3

# Crea il database e la tabella per le visite
conn = sqlite3.connect('web_visits.db')
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS visits (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
                    ip_address TEXT,
                    user_agent TEXT,
                    page TEXT,
                    referrer TEXT
                )''')
conn.commit()

Ora possiamo creare una funzione log_visit_to_db per registrare i dati delle visite nel database:


def log_visit_to_db(ip_address, user_agent, page, referrer):
    conn = sqlite3.connect('web_visits.db')
    cursor = conn.cursor()
    cursor.execute('''INSERT INTO visits (ip_address, user_agent, page, referrer)
                      VALUES (?, ?, ?, ?)''', (ip_address, user_agent, page, referrer))
    conn.commit()
    conn.close()

Con questa funzione, ogni visita viene registrata come una nuova riga nella tabella visits.

Se il tuo sito web è sviluppato in Python, ad esempio utilizzando il framework Flask, puoi facilmente integrare il sistema di logging. Flask fornisce strumenti per accedere agli header della richiesta, che includono dati come l'IP e l'User-Agent.

Ecco come estendere il nostro sistema di logging per funzionare con un'app Flask:


from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def home():
    log_visit_to_db(
        ip_address=request.remote_addr,
        user_agent=request.headers.get('User-Agent'),
        page=request.path,
        referrer=request.referrer
    )
    return "Benvenuto alla homepage!"

if __name__ == "__main__":
    app.run()

In questo esempio, ogni volta che un utente accede alla homepage (/), i suoi dati vengono registrati nel database. Possiamo estendere questo comportamento a tutte le pagine dell'app, chiamando la funzione log_visit_to_db in ogni route.

Conclusione

mplementare un sistema di logging delle visite con Python consente di raccogliere preziosi dati sui visitatori e di ottenere informazioni sul comportamento degli utenti. Partendo da un semplice sistema basato su file, è possibile evolvere verso soluzioni basate su database e visualizzazioni avanzate per migliorare la gestione e l’analisi dei dati.

Torna su