No mencionaron esto en la documentación de Python. Y recientemente estoy probando un sitio web simplemente refrescando el sitio usando urllib2.urlopen() para extraer cierto contenido. De vez en cuando, cuando actualizo el sitio, urllib2.urlopen() parece no obtener el contenido recién agregado. Entonces me pregunto si guarda cosas en algún lugar, ¿verdad?¿Tiene urllib2.urlopen() caché cosas?
Respuesta
Así que me pregunto si se almacenan las cosas en algún lugar, ¿verdad?
No lo es.
Si no ve datos nuevos, esto podría deberse a varios motivos. La mayoría de los servicios web más grandes usan el almacenamiento en caché del lado del servidor por razones de rendimiento, por ejemplo, utilizando proxys de almacenamiento en caché como Varnish y Squid o almacenamiento en caché a nivel de aplicación.
Si el problema es causado por el almacenamiento en caché del lado del servidor, generalmente no hay forma de obligar al servidor a proporcionarle los datos más recientes.
Para el caché de proxies como squid, las cosas son diferentes. Por lo general, Squid agrega algunos encabezados adicionales a la respuesta HTTP (response().info().headers
).
Si ve un campo de encabezado llamado X-Cache
o X-Cache-Lookup
, esto significa que no está conectado directamente al servidor remoto, sino a través de un proxy transparente.
Si tiene algo como: X-Cache: HIT from proxy.domain.tld
, esto significa que la respuesta que obtuvo está en la memoria caché. Lo opuesto es X-Cache MISS from proxy.domain.tld
, lo que significa que la respuesta es reciente.
Gracias, ahora sé cuál es el problema. – Shane
Me resulta difícil creer que urllib2 no hace el almacenamiento en caché, porque en mi caso, al reiniciar el programa, los datos se actualizan. Si el programa no se reinicia, los datos parecen almacenarse en caché para siempre. Además, recuperar los mismos datos de Firefox nunca devuelve datos obsoletos.
urllib2 no hace el almacenamiento en caché. tal vez estés usando un proxy o la propia aplicación web esté almacenando datos temporales. –
Pregunta muy antigua, pero tuve un problema similar que esta solución no resolvió.
En mi caso tuvieron que falsificar la User-Agent como esto:
request = urllib2.Request(url)
request.add_header('User-Agent', 'Mozilla/5.0')
content = urllib2.build_opener().open(request)
la esperanza que esto ayude a ...
Gracias! Tuve el mismo problema al descargar JSON de un feed drupal. Puede que esto no tenga nada que ver con su script de python real, sino con el servidor desde el que está descargando los datos. En nuestro caso, ese servidor almacenó el contenido en caché en función del agente de usuario. –
Su servidor web o un servidor proxy HTTP puede ser el almacenamiento en caché de contenido. Usted puede tratar de desactivar el almacenamiento en caché mediante la adición de una cabecera Pragma: no-cache
solicitud:
request = urllib2.Request(url)
request.add_header('Pragma', 'no-cache')
content = urllib2.build_opener().open(request)
Si realiza cambios y probar el comportamiento de navegador y de urllib, es fácil cometer un error estúpido. En el navegador ha iniciado sesión, pero en urllib.urlopen su aplicación puede redirigirle siempre a la misma página de inicio de sesión, por lo que si solo ve el tamaño de la página o la parte superior de su diseño común, podría pensar que sus cambios no tienen efecto .
- 1. pitón urllib2 urlopen respuesta
- 2. urllib.urlopen funciona, pero urllib2.urlopen no
- 3. cuelga detecta con Python urllib2.urlopen
- 4. Almacenamiento en caché en urllib2?
- 5. urllib2.URLError: <error urlopen [Errno 11004] getaddrinfo fallida>
- 6. ¿Qué errores/excepciones debo manejar con urllib2.Request/urlopen?
- 7. python: urllib2 cómo enviar cookies con la solicitud de urlopen
- 8. Python: Obtenga los encabezados HTTP de la llamada urllib2.urlopen?
- 9. cierre de archivos correctamente abrieron con urllib2.urlopen()
- 10. urllib2.urlopen() vs urllib.urlopen() - urllib2 arroja 404 mientras que urllib funciona! ¿POR QUÉ?
- 11. Python: urllib2.urlopen (url, datos) ¿Por qué tienes que urllib.urlencode() los datos?
- 12. ¿Por qué no puedo descargar un archivo de imagen completo con urllib2.urlopen()
- 13. Python's `urllib2`: ¿Por qué obtengo el error 403 cuando` urlopen` una página de Wikipedia?
- 14. AttributeError: el objeto 'module' no tiene ningún atributo 'urlopen'
- 15. ¿Cómo puedo obtener la URL de redireccionamiento final al usar urllib2.urlopen?
- 16. tiempo de espera para urllib2.urlopen() en versiones anteriores a Python 2.6
- 17. ¿Por qué el urllib2.urlopen() de Python genera un HTTPError para códigos de estado exitosos?
- 18. Obtener socket para el valor de retorno urllib2.urlopen para HTTP
- 19. Urllib2.urlopen() de Python colgando con conexión local a un servidor de Restlet de Java
- 20. ¿Tiene contenido de páginas web con Python?
- 21. ¿El barniz no tiene caché, cookies?
- 22. DBIx :: Class tiene un caché transparente?
- 23. Proxy con urllib2
- 24. Python: urllib/urllib2/httplib confusion
- 25. urllib2 autenticación básica oddites
- 26. Disminución con urllib2
- 27. Python - urllib2 y cookielib
- 28. urllib2 con cookies
- 29. Python: Urllib2 y OpenCV
- 30. urllib2 a la cadena
Los servidores web también almacenan caché. Ese es el culpable habitual. Compruebe los encabezados en el resultado y ** actualice ** su pregunta para incluir 'info()'. –
@ S.Lott: "Los servidores web también guardan cosas en caché" ¿Significa que si no obtuve los resultados actualizados usando urllib2.urlopen() que son principalmente servidores web "saber", me resulta refrescante y no me dan la actualización ¿cosas? ¿Hay alguna manera de obligar al servidor a transmitir los datos una y otra vez cada vez que actualizo el sitio? – Shane
A menos que sepa un ** lote ** sobre el servidor web, realmente no sabe qué cachés tiene. Podría tener múltiples niveles de almacenamiento en caché. Podría haber configurado incorrectamente la memoria caché.Podría tener páginas que no proporcionan información para actualizar el caché. Muchas cosas pueden ir mal en el lado del servidor. –