import logging import requests import urllib3 # Session de requêtage HTTP session = requests.Session() # Objet pour afficher le journal d’exécution logger = logging.getLogger('fetch.http') class RetryAdapter(requests.adapters.HTTPAdapter): """ Adapteur de requêtes réessayant les requêtes échouées avec un délai adaptatif. """ def __init__(self): # Réessaie jusqu’à dix fois la récupération de chaque page, en # augmentant progressivement le délai entre chaque essai retry = urllib3.util.Retry(total=10, backoff_factor=0.3) super(RetryAdapter, self).__init__(max_retries=retry) def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): logger.debug('{} {}'.format(request.method, request.url)) return super(RetryAdapter, self).send( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies ) adapter = RetryAdapter() session.mount('http://', adapter) session.mount('https://', adapter) # Identification du robot session.headers['User-Agent'] = ( 'WikimedicaDiseaseSearch/0.1 ' '(https://gitlab.com/matteodelabre/wikimedica-disease-search)' )