Lorsque vous créez un robot d'exploration, vous devez garder à l'esprit l'exécution itérative. Par conséquent, je suis préoccupé par le cache du site à la destination du robot d'exploration.
Même si vous l'exécutez à nouveau avec le cache appliqué, les données qui peuvent être acquises en affichant la même page sont les mêmes.
Cette fois, je voudrais résumer le cache HTTP en Python.
Le cache HTTP est défini dans la RFC7234. En ajoutant un en-tête lié à la mise en cache à la réponse, le serveur HTTP peut ajouter au client HTTP et instruire la politique de mise en cache du contenu.
En-tête HTTP | Right align |
---|---|
Cache-Control | Instructions détaillées sur la politique de mise en cache, par exemple si le contenu peut être mis en cache |
Expires | Indique la date d'expiration du contenu |
Etag | Représente un identificateur de contenu. La valeur d'Etag change à mesure que le contenu change |
Last-Modified | Représente la dernière date et heure de mise à jour du contenu |
Pragma | Cache-Similaire à Control, mais est maintenant laissé pour la compatibilité descendante uniquement |
Vary | Indique que la réponse renvoyée par le serveur change lorsque la valeur de l'en-tête de demande inclus dans la valeur change. |
Une fois que le client met en cache la réponse, il n'envoie pas de demande jusqu'à ce qu'elle expire et utilise la réponse mise en cache.
Une fois que le client a mis en cache la réponse, il enverra une demande conditionnelle la prochaine fois, et le serveur renverra un corps de réponse vide avec un code d'état 304 s'il n'y a pas de mises à jour.
import requests
from cachecontrol import CacheControl
from cachecontrol.caches import FileCache
session = requests.Session()
#session d'encapsulation en cache_Faites une session.
#Cache en tant que fichier.Enregistrez dans le répertoire webcache.
cached_session = CacheControl(session, cache=FileCache('.webcache'))
response = cached_session.get('URL')
# response.from_Vous pouvez obtenir la réponse obtenue du cache avec l'attribut cache.
print(f'from_cache: {response.from_cache}')
print(f'status_code: {response.status_code}')
À partir de la deuxième fois, le contenu mis en cache sera renvoyé.
Recommended Posts