Wenn Sie einen Crawler erstellen, sollten Sie die iterative Ausführung berücksichtigen. Daher bin ich besorgt über den Cache der Site am Crawler-Ziel.
Selbst wenn Sie es erneut mit dem angewendeten Cache ausführen, sind die Daten, die durch Anzeigen derselben Seite abgerufen werden können, dieselben.
Dieses Mal möchte ich den HTTP-Cache in Python zusammenfassen.
Der HTTP-Cache ist in RFC7234 definiert. Durch Hinzufügen eines Headers zum Caching zur Antwort kann der HTTP-Server dem HTTP-Client hinzufügen und die Richtlinie zum Zwischenspeichern von Inhalten anweisen.
HTTP-Header | Right align |
---|---|
Cache-Control | Detaillierte Anweisungen zur Caching-Richtlinie, z. B. ob Inhalte zwischengespeichert werden können |
Expires | Gibt das Ablaufdatum des Inhalts an |
Etag | Stellt eine Inhaltskennung dar. Der Wert von Etag ändert sich, wenn sich der Inhalt ändert |
Last-Modified | Stellt das Datum und die Uhrzeit der letzten Aktualisierung des Inhalts dar |
Pragma | Cache-Ähnlich wie Control, wird jedoch nur aus Gründen der Abwärtskompatibilität verwendet |
Vary | Gibt an, dass sich die vom Server zurückgegebene Antwort ändert, wenn sich der Wert des im Wert enthaltenen Anforderungsheaders ändert. |
Sobald der Client die Antwort zwischengespeichert hat, sendet er keine Anfrage, bis sie abläuft und die zwischengespeicherte Antwort verwendet.
Sobald der Client die Antwort zwischengespeichert hat, sendet er beim nächsten Mal eine bedingte Anforderung, und der Server gibt einen leeren Antworttext mit dem Statuscode 304 zurück, wenn keine Aktualisierungen vorliegen.
import requests
from cachecontrol import CacheControl
from cachecontrol.caches import FileCache
session = requests.Session()
#zwischengespeicherte Wrapping-Sitzung_Machen Sie eine Sitzung.
#Cache als Datei.Speichern Sie im Webcache-Verzeichnis.
cached_session = CacheControl(session, cache=FileCache('.webcache'))
response = cached_session.get('URL')
# response.from_Sie können die aus dem Cache erhaltene Antwort mit dem Cache-Attribut erhalten.
print(f'from_cache: {response.from_cache}')
print(f'status_code: {response.status_code}')
Ab dem zweiten Mal wird der zwischengespeicherte Inhalt zurückgegeben.
Recommended Posts