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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top