Pregunta

Soy relativamente nuevo en Python, así que si esto es una pregunta obvia, me disculpo.

Mi pregunta es con respecto a la biblioteca urllib2, y es función urlopen. Actualmente estoy usando esto para cargar una gran cantidad de páginas de otro servidor (que son todos en el mismo host remoto) pero el guión es asesinada de vez en cuando por un error de tiempo de espera (supongo que esto es de las grandes peticiones).

¿Hay una manera de mantener la secuencia de comandos se ejecuta después de un tiempo de espera? Me gustaría ser capaz de ir a buscar a todas las páginas, así que quiero un script que va a seguir intentando hasta que obtiene una página, y luego sigue su camino.

En una nota lateral, se mantiene la conexión abierta con la ayuda del servidor?

¿Fue útil?

Solución

La próxima vez que se produce el error, tome nota del mensaje de error. La última línea le dirá el tipo de excepción. Por ejemplo, podría ser un urllib2.HTTPError. Una vez conocido el tipo de excepción planteada, se puede tomar en un bloque try...except. Por ejemplo:

import urllib2
import time

for url in urls:
    while True:
        try:
            sock=urllib2.urlopen(url)
        except (urllib2.HTTPError, urllib2.URLError) as err:
            # You may want to count how many times you reach here and
            # do something smarter if you fail too many times.
            # If a site is down, pestering it every 10 seconds may not
            # be very fruitful or polite.
            time.sleep(10)
        else:              
            # Success  
            contents=sock.read()
            # process contents
            break                # break out of the while loop
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top