Détection erros de délai d'attente dans le urlopen urllib2 Python
Question
Je suis encore relativement nouveau pour Python, donc si cela est une question évidente, je présente mes excuses.
Ma question est en ce qui concerne la bibliothèque urllib2 et sa fonction urlopen. Actuellement, je suis en utilisant cette option pour charger une grande quantité de pages d'un autre serveur (ils sont tous sur le même hôte distant) mais le script est tué chaque maintenant et puis par une erreur de délai d'attente (je suppose que c'est des grandes demandes).
Y at-il un moyen de garder le script en cours d'exécution après un délai d'attente? Je voudrais être en mesure d'aller chercher toutes les pages, donc je veux un script qui va continuer à essayer jusqu'à ce qu'il obtienne une page, puis se déplace sur.
Sur une note de côté, se garder la connexion ouverte à l'aide du serveur?
La solution
La prochaine fois que l'erreur se produit, prendre note du message d'erreur. La dernière ligne vous indiquera le type d'exception. Par exemple, il pourrait être un urllib2.HTTPError
. Une fois que vous connaissez le type d'exception soulevée, vous pouvez l'attraper dans un bloc de try...except
. Par exemple:
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
Autres conseils
Le manuel manquant de urllib2 pourrait aider vous