Sie haben dies in der Python-Dokumentation nicht erwähnt. Und vor kurzem teste ich eine Website einfach die Website mit urllib2.urlopen() aktualisieren, um bestimmte Inhalte zu extrahieren, merke ich manchmal, wenn ich die Website urllib2.urlopen() zu aktualisieren scheint nicht die neu hinzugefügten Inhalte. Ich frage mich also, ob es irgendwo Cache-Sachen gibt, oder?Führt urllib2.urlopen() Cache Zeug?
Antwort
Also ich frage mich, ob es Sachen irgendwo zwischenspeichern kann, richtig?
Es tut es nicht.
Wenn Sie keine neuen Daten sehen, könnte dies viele Gründe haben. Die meisten größeren Webdienste verwenden aus Leistungsgründen serverseitiges Caching, z. B. mithilfe von Caching-Proxys wie Varnish und Squid oder Caching auf Anwendungsebene.
Wenn das Problem durch das serverseitige Zwischenspeichern verursacht wird, ist es normalerweise nicht möglich, den Server dazu zu zwingen, Ihnen die neuesten Daten zu geben.
Für Caching-Proxies wie Tintenfisch, sind die Dinge anders. Normalerweise fügt squid der HTTP-Antwort einige zusätzliche Header hinzu (response().info().headers
).
Wenn Sie ein Headerfeld mit den Namen X-Cache
oder X-Cache-Lookup
sehen, bedeutet dies, dass Sie nicht direkt mit dem Remote-Server verbunden sind, sondern über einen transparenten Proxy.
Wenn Sie etwas wie: X-Cache: HIT from proxy.domain.tld
haben, bedeutet dies, dass die Antwort, die Sie erhalten, zwischengespeichert wird. Das Gegenteil ist X-Cache MISS from proxy.domain.tld
, was bedeutet, dass die Antwort frisch ist.
Danke, jetzt weiß ich, was das Problem ist. – Shane
Es fällt mir schwer zu glauben, dass urllib2 kein Caching durchführt, weil in meinem Fall beim Neustart des Programms die Daten aktualisiert werden. Wenn das Programm nicht neu gestartet wird, werden die Daten anscheinend für immer zwischengespeichert. Das Abrufen der gleichen Daten aus Firefox gibt auch keine veralteten Daten zurück.
urllib2 führt kein Caching durch. Vielleicht verwenden Sie einen Proxy oder die Webanwendung selbst speichert temporäre Daten. –
Sehr alte Frage, aber ich hatte ein ähnliches Problem, das diese Lösung nicht gelöst hat.
In meinem Fall hatte ich so die User-Agenten zu fälschen:
request = urllib2.Request(url)
request.add_header('User-Agent', 'Mozilla/5.0')
content = urllib2.build_opener().open(request)
Hope this jemand kann ...
Danke! Hatte das gleiche Problem beim Herunterladen von JSON von einem Drupal-Feed. Dies hat möglicherweise nichts mit Ihrem eigentlichen Python-Skript zu tun, sondern eher mit dem Server, von dem Sie Daten herunterladen. In unserem Fall hat der Server Inhalt basierend auf dem Benutzeragenten zwischengespeichert. –
Ihren Web-Server oder ein HTTP-Proxy-Inhalte werden das Caching hilft. Sie können versuchen, das Caching zu deaktivieren, indem Sie einen Pragma: no-cache
Request-Header hinzugefügt:
request = urllib2.Request(url)
request.add_header('Pragma', 'no-cache')
content = urllib2.build_opener().open(request)
Wenn Sie Änderungen und testen Sie das Verhalten von Browser und von urllib machen, ist es einfach, einen dummen Fehler zu machen. Im Browser sind Sie angemeldet, aber in urllib.urlopen kann Ihre App Sie immer auf dieselbe Anmeldeseite umleiten. Wenn Sie also nur die Seitengröße oder das obere Ende Ihres gemeinsamen Layouts sehen, könnten Sie denken, dass Ihre Änderungen keine Wirkung haben .
- 1. Python urllib2 urlopen Antwort
- 2. urllib2 urlopen funktioniert sehr zufällig
- 3. Mocking urllib2.urlopen(). Read() für verschiedene Antworten
- 4. Python: urllib2.urlopen() mit SIGTERM unterbrechen
- 5. urllib.urlopen funktioniert aber urllib2.urlopen nicht
- 6. urllib2.urlopen() vs urllib.urlopen() - urllib2 löst 404, während urllib funktioniert! WARUM?
- 7. Was bewirkt, dass urllib2.urlopen() eine Verbindung über Proxy herstellt?
- 8. Schließen von Dateien ordnungsgemäß mit urllib2.urlopen geöffnet()
- 9. Timeout für urllib2.urlopen() in vor Python 2.6-Versionen
- 10. Welche Registrierungs-/Umgebungseinstellungen (oder andere) verwendet urllib2.urlopen zum Ermitteln der Proxyeinstellungen?
- 11. Führt MySQL Cache-Abfragen ein?
- 12. Wie kann ich die endgültige Weiterleitungs-URL erhalten, wenn Sie urllib2.urlopen verwenden?
- 13. Verwendung der Abfrage für ein dateiähnliches Objekt, das von urllib2.urlopen() zurückgegeben wird?
- 14. Warum kann ich nicht eine ganze Bilddatei mit urllib2.urlopen herunterladen()
- 15. Image scraper: urllib2.URLError: <urlopen Fehler Kein Host angegeben>
- 16. Python: urllib2.urlopen (URL, Daten) Warum müssen Sie urllib.urlencode() die Daten?
- 17. urllib.retrieve und urllib2.urlopen kehrt nach dem Download des Bildes nie zurück
- 18. SQL Server Zeug float
- 19. HTML 5 - Sneaky Zeug
- 20. Amateur Webhosting/Xampp Zeug
- 21. Reflection VS statische Zeug
- 22. URLError: urlopen Fehler abgelaufen
- 23. Brauchen Sie eine Lösung urllib2
- 24. Android einfaches Zeug über Scrollen
- 25. urlopen erstickt mich mit Zeilenumbrüchen
- 26. Python urlopen Fehler [Errno 10060]
- 27. Führt Windows Phone 7 eine Web-Cache-Anfrage durch?
- 28. führt R Cache-Ergebnisse, die nicht zugewiesen sind
- 29. Führt eine größere Cache-Größe immer zu einer verbesserten Leistung?
- 30. Führt der Browser jemals eine Cache-Antwort durch, wenn keine zum Cache gehörenden Header zurückgegeben werden?
Webserver Cache Sachen auch. Das ist der übliche Schuldige. Überprüfen Sie die Header auf dem Ergebnis, und ** aktualisieren Sie Ihre Frage, um die 'info()' einzuschließen. –
@ S.Lott: "Webserver-Cache stuff auch" Bedeutet es, wenn ich nicht die aktualisierten Ergebnisse mit urllib2.urlopen() erhalten, das ist hauptsächlich Webserver "wissen", es ist mir erfrischend und geben Sie mir nicht die aktualisierte Sachen? Gibt es eine Möglichkeit, den Server zu zwingen, die Daten jedes Mal neu zu übertragen, wenn ich die Site aktualisiere? – Shane
Sofern Sie nicht eine Menge über den Webserver wissen, wissen Sie nicht wirklich, welche Caches es hat. Es könnte mehrere Cache-Ebenen haben. Es könnte Cache falsch konfiguriert haben.Es könnte Seiten enthalten, die keine Informationen zum Aktualisieren des Cache bereitstellen. Auf der Serverseite kann viel schief gehen. –