CodeGym /Corsi /Python SELF IT /Salvataggio e caching dei dati

Salvataggio e caching dei dati

Python SELF IT
Livello 34 , Lezione 4
Disponibile

1. Perché serve il caching?

Allora, ragazzi, siamo arrivati a una delle parti più affascinanti del web scraping: il caching dei dati. Perché usare il caching? Perché è come stabilire il tuo record personale di "velocità di cinque minuti" con gli script! Vediamo insieme perché serve e come funziona, ma in modo semplice, così non facciamo andare la testa in tilt.

Immaginate: avete fatto il web scraping di un sito, avete preso tutti i dati necessari e domani volete aggiornarli. Davvero dovrete rifare tutto da capo, immergendovi in un ciclo infinito di richieste? No, si può evitare lavoro inutile e salvare i dati utilizzando il caching.

Vantaggi del caching:

  • Velocità: I dati in cache sono accessibili più velocemente rispetto a scaricarli di nuovo dal server. È come avere accesso rapido al tuo dolce preferito: non devi tornare in pasticceria, è già nel tuo frigo!
  • Risparmio: Non sovraccarichi i server con richieste inutili e risparmi anche sul tuo traffico internet. Un bonus gratuito!
  • Affidabilità: Il caching aiuta a gestire problemi temporanei di connessione. Se il sito diventa improvvisamente non disponibile, hai comunque i dati. È come avere un paracadute di riserva.

2. Fondamenti del caching dei dati

Cos'è una cache?

La cache è un archivio temporaneo che permette di riutilizzare dati già estratti. In programmazione, il caching aiuta a evitare di richiedere gli stessi dati più volte. Pensate alla cache come alla vostra biblioteca personale di informazioni usate spesso.

Tipi di cache:

  • Cache in memoria: Veloce, ma si svuota quando si spegne il dispositivo. Funziona come la RAM.
  • Cache su file: I dati vengono salvati su disco, più persistente e durevole.

3. Caching pratico con Python

Per fare caching dei dati in Python, possiamo usare la libreria requests. Tuttavia, la libreria requests non supporta nativamente il caching. Qui entra in gioco requests-cache, che offre un modo semplice per aggiungere caching alle tue richieste.

Installazione della libreria

Bash

pip install requests-cache

Configurazione del caching

Configuriamo il caching nel nostro script:

Python

import requests_cache

# Configuriamo una cache SQLite
requests_cache.install_cache('demo_cache', expire_after=180)

import requests

# Inviamo una richiesta
response = requests.get('https://jsonplaceholder.typicode.com/todos/1')

# Verifichiamo da dove arriva la risposta
print(f'Dalla cache: {response.from_cache}')

# Stampiamo i dati
print(response.json())

Prima di tutto, configuriamo una cache usando requests_cache.install_cache. Questo creerà un database SQLite per memorizzare i dati in cache. Il parametro expire_after indica il tempo (in secondi) dopo il quale i dati in cache verranno eliminati. Qui abbiamo impostato il caching per tre minuti.

Particolarità del caching

Quando esegui nuovamente questo codice, fai attenzione a response.from_cache. Questa variabile sarà uguale a True per le chiamate successive durante i primi tre minuti.

Eliminazione della cache

Eliminare la cache è semplice: cancella il file del database o usa il metodo requests_cache.clear() per rimuovere tutte le registrazioni dalla tua cache.

4. Funzionalità avanzate del caching

Caching condizionato

A volte potrebbe essere necessario un caching più controllato. Ad esempio, non hai bisogno di mettere in cache i dati se sono già obsoleti o se i parametri delle richieste cambiano.

In questi casi, puoi utilizzare requests-cache con parametri aggiuntivi:

Python

requests_cache.install_cache('custom_cache',
             allowable_methods=['GET', 'POST'],
             allowable_codes=[200, 404],
             ignored_parameters=['timestamp'])

Qui permettiamo il caching per i metodi GET e POST e solo per risposte con codici 200 e 404. Ignoriamo anche il parametro timestamp, in modo che le richieste con timestamp diversi non vengano considerate diverse.

Lavorare con Redis

Se hai bisogno di una soluzione più potente, ad esempio il supporto per il caching distribuito, puoi utilizzare redis. È un sistema di caching in memoria molto popolare nel mondo dei big data.

Passaggi:

  1. Installa Redis e la libreria Python:
    Bash
    
    brew install redis  # per utenti macOS
    pip install redis
    
  2. Configura Redis nel tuo progetto:
    Python
    
    import redis
    import requests
    
    r = redis.Redis(host='localhost', port=6379, db=0)
    
    def get_cached_response(url):
        if r.get(url):
            return r.get(url).decode('utf-8')
        else:
            response = requests.get(url)
            r.setex(url, 3600, response.text)  # caching per 1 ora
            return response.text
    
    print(get_cached_response('https://jsonplaceholder.typicode.com/todos/1'))
    

Questo esempio utilizza Redis per salvare le risposte per un'ora. Controlliamo se i dati sono già nella cache e, solo in caso negativo, facciamo la richiesta HTTP.

5. Gestione degli errori

Quando lavori con il caching, a volte il database può danneggiarsi o la cache non si aggiorna. In questi casi, è una buona pratica tenere dei log e fare controlli regolari sui dati.

Esempio di codice per il logging:

Python

import logging

logging.basicConfig(level=logging.INFO)

try:
    response = get_cached_response('https://jsonplaceholder.typicode.com/todos/1')
    logging.info("Dati estratti con successo dalla cache")
except Exception as e:
    logging.error("Errore durante l'estrazione dei dati: %s", str(e))

Conclusioni

Il caching non è solo uno strumento per velocizzare il lavoro. È un modo per rendere le tue applicazioni più affidabili e resilienti a problemi temporanei di rete o sovraccarichi del server. Usare strumenti come requests-cache o redis ti permette di gestire in modo efficace le richieste e salvare i dati per un uso successivo. Diventa un guru del caching e non sovraccaricare i tuoi script con richieste inutili! E come dice un vecchio proverbio del programmatore: "Meglio fare caching una volta, che chiedere cento".

1
Опрос
Bypass delle restrizioni per il parsing,  34 уровень,  4 лекция
недоступен
Bypass delle restrizioni per il parsing
Bypass delle restrizioni per il parsing
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION