CodeGym /Curso de Java /Python SELF ES /Guardado y caching de datos

Guardado y caching de datos

Python SELF ES
Nivel 34 , Lección 4
Disponible

1. ¿Por qué es necesario el caching?

Bueno chicos, hemos llegado a una de las partes más emocionantes del web scraping: ¡el caching de datos! ¿Por qué hacer caching? Porque es como establecer tu propio "récord limpio de cinco minutos" trabajando con scripts. Vamos a entender por qué lo necesitamos y cómo funciona, pero de manera simple, para que no se te revuelva la cabeza.

Imagina esto: has hecho un web scraping de un sitio, obtuviste todos los datos necesarios y mañana quieres actualizarlos. ¿De verdad tendrás que meterte otra vez en un interminable ciclo de solicitudes? No, puedes evitar el trabajo duplicado y guardar los datos usando caching.

Ventajas del caching:

  • Velocidad: Los datos cacheados están disponibles más rápido que volver a descargarlos del servidor. Es como tener acceso rápido a tu pastel favorito: no necesitas ir nuevamente a la tienda, ¡ya está en tu nevera!
  • Ahorro: No sobrecargas los servidores con solicitudes innecesarias y también ahorras tu tráfico de internet. ¡Un bonus gratis!
  • Resiliencia: El caching ayuda a lidiar con problemas temporales de conexión. Si el sitio de repente no está disponible, igual tienes los datos. Es como tener un paracaídas extra.

2. Fundamentos del caching de datos

¿Qué es el cache?

Un cache es un almacenamiento temporal que te permite reutilizar datos obtenidos previamente. En programación, el caching ayuda a evitar solicitar los mismos datos repetidamente. Piensa en el cache como tu biblioteca personal de información frecuentemente usada.

Tipos de cache:

  • Cache en memoria: Rápido, pero se borra cuando se apaga el dispositivo. Funciona como la memoria RAM.
  • Cache de archivos: Los datos se almacenan en el disco, siendo más resistente y duradero.

3. Caching práctico con Python

Para hacer caching de datos en Python, podemos usar la librería requests. Sin embargo, esta librería no soporta caching de manera nativa. Aquí es donde entra en juego requests-cache, que ofrece una manera sencilla de añadir caching a tus solicitudes.

Instalación de la librería

Bash

pip install requests-cache

Configuración del caching

Vamos a configurar el caching en nuestro script:

Python

import requests_cache

# Configuramos el cache en SQLite
requests_cache.install_cache('demo_cache', expire_after=180)

import requests

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

# Verificamos de dónde vino la respuesta
print(f'Del cache: {response.from_cache}')

# Mostramos los datos
print(response.json())

Primero, configuramos el cache llamando a requests_cache.install_cache. Esto creará una base de datos SQLite para almacenar los datos cacheados. El parámetro expire_after indica el tiempo (en segundos) después del cual los datos cacheados serán eliminados. Aquí configuramos el cache para tres minutos.

Características del caching

Cuando vuelvas a ejecutar este código, presta atención a response.from_cache. Esta variable será igual a True para las llamadas subsiguientes dentro de los primeros tres minutos.

Eliminación del cache

Eliminar el cache es fácil: borra el archivo de la base de datos o usa el método requests_cache.clear() para limpiar todas las entradas de tu cache.

4. Capacidades avanzadas de caching

Caching condicional

A veces necesitas caching más controlado. Por ejemplo, puede que no necesites cachear datos si ya están desactualizados o si cambian parámetros de la solicitud.

Para tales casos, puedes usar requests-cache con parámetros adicionales:

Python

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

Aquí permitimos caching para los métodos GET y POST, y solo para respuestas con códigos 200 y 404. También ignoramos el parámetro timestamp para que las solicitudes con diferentes marcas temporales no sean consideradas diferentes.

Trabajo con Redis

Si necesitas una solución más potente, como soporte para caching distribuido, puedes usar redis. Es un sistema de caching basado en memoria, popular en el mundo de big data.

Pasos a seguir:

  1. Instala Redis y la librería de Python:
    Bash
    
    brew install redis  # para usuarios de macOS
    pip install redis
    
  2. Configura Redis en tu proyecto:
    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)  # cacheamos por 1 hora
            return response.text
    
    print(get_cached_response('https://jsonplaceholder.typicode.com/todos/1'))
    

Este ejemplo usa Redis para almacenar respuestas durante una hora. Verificamos si los datos están en el cache y solo en caso de que falten se realiza la solicitud HTTP.

5. Manejo de errores

Cuando trabajas con caching, a veces la base puede estar dañada o el cache no se actualiza. En tales casos, una buena práctica es llevar un registro (logs) y revisar los datos regularmente.

Ejemplo de código para llevar logs:

Python

import logging

logging.basicConfig(level=logging.INFO)

try:
    response = get_cached_response('https://jsonplaceholder.typicode.com/todos/1')
    logging.info("Datos extraídos exitosamente del cache")
except Exception as e:
    logging.error("Error al extraer datos: %s", str(e))

Reflexiones finales

El caching no es solo una herramienta para acelerar el trabajo. Es una forma de hacer tus aplicaciones más confiables y resistentes a fallos temporales en la red o sobrecarga de los servidores. Usar herramientas como requests-cache o redis permite gestionar eficientemente las solicitudes y guardar datos para su uso posterior. ¡Sé un gurú del cache y no sobrecargues tus scripts con solicitudes innecesarias! Y como dice ese viejo dicho programador: "Es mejor cachear una vez que preguntar cien veces."

1
Опрос
Evitando restricciones para parsing,  34 уровень,  4 лекция
недоступен
Evitando restricciones para parsing
Evitando restricciones para parsing
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION