Passer au contenu

Code d'état 503 : l'ennemi juré du Web Scraper (et comment le vaincre)

Si vous avez passé du temps sur le Web, vous avez sans aucun doute rencontré la redoutable erreur « 503 Service non disponible ». Pour l’internaute moyen, c’est un désagrément mineur. Mais pour les web scrapers, cela peut constituer un obstacle majeur à la collecte des données dont ils ont besoin.

Selon les données de Pingdom, les erreurs 503 sont le deuxième code d'état 5xx le plus courant, représentant près de 25 % de toutes les réponses d'erreur du serveur. Et dans une enquête menée auprès de plus de 1,000 38 développeurs, 503 % ont déclaré que le dépannage et la résolution des erreurs XNUMX étaient l'une des parties les plus frustrantes de leur travail.

En tant que web scraper professionnel, vous ne pouvez pas vous permettre de laisser les erreurs 503 faire dérailler vos projets. Dans ce guide détaillé, nous expliquerons exactement ce que signifient les codes d'état 503, leurs causes et, plus important encore, les stratégies éprouvées pour les éviter et les surmonter. Allons-y !

Déconstruire l'erreur 503 : un aperçu

Avant de parler de la manière d’éviter les erreurs 503, il est important de comprendre ce qu’elles signifient réellement.

Un code d'état 503 est un code d'état de réponse HTTP indiquant que le serveur est temporairement incapable de traiter la demande. Cela se produit généralement parce que le serveur est surchargé ou en panne pour maintenance.

Officiellement, la description du code d'état 503 est « Service indisponible ». Vous verrez souvent cela affiché sur les pages d'erreur avec des messages tels que :

  • "Le serveur est temporairement incapable de répondre à votre demande en raison d'un temps d'arrêt pour maintenance ou de problèmes de capacité. Veuillez réessayer plus tard."
  • "Le service n'est pas disponible. Veuillez réessayer plus tard."
  • "Ce site reçoit plus de trafic que d'habitude. Merci de patienter, nous reviendrons sous peu !"

Une chose importante à noter est qu'une erreur 503 signifie spécifiquement que le serveur lui-même fonctionne correctement, mais qu'il ne peut pas gérer la requête en cours pour une raison quelconque. Ceci est distinct des autres erreurs 5xx qui indiquent une défaillance réelle du serveur :

Code d'étatNomDescription
500Internal Server ErrorErreur générique indiquant une condition inattendue sur le serveur
501Non mise en œuvreLe serveur ne prend pas en charge la fonctionnalité permettant de répondre à la demande
502Bad passerelleLe serveur agissant en tant que proxy/passerelle a reçu une réponse non valide de l'origine
503Dịch vụ không cóLe serveur est surchargé ou en panne pour maintenance
504Gateway TimeoutLe serveur de passerelle n'a pas reçu de réponse du serveur d'origine à temps

Comme vous pouvez le constater, les erreurs 503 tombent dans une zone grise. Le serveur n'est pas en panne en soi, il n'est tout simplement pas disponible pour répondre à ce moment-là. Il s’agit d’une distinction clé sur laquelle nous reviendrons plus tard.

Disséquer les causes des erreurs 503

Alors, qu’est-ce qui amène réellement un serveur à renvoyer une erreur 503 ? Il existe quelques scénarios courants :

  1. Ressources de serveur surchargées
    Chaque serveur dispose de ressources limitées : processeur, mémoire, E/S disque, bande passante réseau, etc. Lorsque le volume de requêtes entrantes dépasse ce que ces ressources peuvent gérer, le serveur peut commencer à refuser de nouvelles connexions pour éviter de planter complètement. Il répondra par un 503 pour signaler qu'il est trop occupé pour répondre à la demande pour le moment.

  2. Maintenance planifiée
    De nombreux sites Web disposent de fenêtres de maintenance périodiques au cours desquelles ils déploient des mises à jour, exécutent des sauvegardes ou effectuent d'autres opérations de maintenance. Pendant cette période, le site peut être partiellement ou totalement indisponible. Les requêtes échoueront avec un 503 jusqu'à ce que la maintenance soit terminée et que le serveur soit redémarré.

  3. Atténuation des attaques DDoS
    Lorsqu'un site Web est victime d'une attaque par déni de service distribué (DDoS), il peut activer des règles de limitation ou de blocage de débit d'urgence pour repousser le trafic malveillant. Cela peut amener des demandes légitimes à se retrouver prises entre deux feux et à être rejetées avec des erreurs 503.

  4. Blocages du pare-feu d'application Web
    De nombreux sites Web acheminent les requêtes via un pare-feu d'application Web (WAF) pour se protéger contre les attaques courantes telles que l'injection SQL et les scripts intersites. Si une demande semble suspecte, le WAF peut la bloquer et renvoyer une erreur 503.

  5. CAPTCHA du service anti-bot
    Certains sites Web utilisent des CAPTCHA et d’autres tests défi-réponse pour tenter de filtrer les robots se faisant passer pour des humains. Les scrapers Web automatisés peuvent être piégés par ceux-ci, entraînant des erreurs 503.

Selon le rapport Bad Bot 2022 d'Imperva, 27.7 % de tout le trafic des sites Web provient de robots, et 30.2 % de ce trafic de robots est malveillant. Il n’est pas étonnant que de plus en plus de sites sévissent, au grand dam des web scrapers.

Déterminer la cause première de VOS erreurs 503

Lorsque votre web scraper commence à ne renvoyer que des erreurs 503, ne paniquez pas. La première étape consiste à identifier la cause sous-jacente. Il existe deux possibilités principales :

  1. Le site Web est complètement en panne ou inaccessible à tout le monde
  2. Le site Web est disponible mais a bloqué votre scraper spécifique

Pour savoir à quel scénario vous faites face, essayez de naviguer jusqu'à l'URL qui renvoie les erreurs 503 dans un navigateur Web classique ou à partir d'un proxy dans une autre région géographique. Si vous pouvez accéder au site normalement, cela signifie que les erreurs 503 sont spécifiques à votre adresse IP de scraping.

Vous pouvez également utiliser des outils de surveillance de sites Web tiers pour vérifier l'état général du site :

  • DownDetector suit les problèmes signalés par les utilisateurs sur les sites Web populaires
  • UptimeRobot et Pingdom surveilleront une URL à partir de plusieurs emplacements mondiaux
  • IsItDownRightNow et CurrentDown fournissent des vérifications rapides de l'état

Si l'un d'entre eux indique que le site Web est indisponible pour tout le monde, vous devrez attendre qu'il résolve son problème. Aucun codage intelligent ne peut détruire un site Web complètement hors ligne.

Mais si le site semble bien au reste du monde, cela signifie que vous devrez vous concentrer sur la façon dont votre scraper imite mieux un utilisateur normal.

Tactiques testées au combat pour éviter les erreurs 503

À ce stade, vous avez déterminé que les demandes de votre scraper sont sélectionnées et bloquées avec des erreurs 503. Que pouvez-vous faire? Voici quelques techniques éprouvées pour remettre votre web scraper dans les bonnes grâces du site :

  1. Ralentissez votre roulement
    La principale raison pour laquelle les sites Web bloquent les scrapers est qu’ils font trop de requêtes et trop rapidement. Marteler un site plus rapidement que n’importe quel humain ne pourrait le parcourir est extrêmement suspect. Votre première ligne de défense devrait être de limiter vos scrapers pour ne demander qu'une seule page toutes les 10 à 15 secondes au maximum. Pensez également à ajouter des délais aléatoires entre les requêtes pour rendre le timing plus organique.

  2. Répartir la charge
    Même avec des délais supplémentaires, effectuer des centaines ou des milliers de requêtes à partir d’une seule adresse IP sur une courte période reste un énorme signal d’alarme. La répartition des requêtes sur un pool de proxys rotatifs donne l'impression que votre trafic provient de nombreux utilisateurs légitimes différents situés dans différents endroits. L’utilisation de proxys provenant de différents sous-réseaux et même de différents fournisseurs augmente encore le camouflage.

  3. Mélangez-vous avec les humains
    Tout ce qui concerne les requêtes de votre scraper doit imiter un utilisateur normal avec un navigateur classique. Cela signifie définir un en-tête User-Agent commun qui correspond aux visiteurs typiques du site Web. Cela signifie également inclure des en-têtes normaux comme Accept-Language et Referer. Assurez-vous de définir un pot à cookies pour stocker et renvoyer également tous les cookies émis par le site.

  4. Évitez les pièges à robots courants
    Évitez les modèles d'exploration qui sont extrêmement inefficaces pour un humain mais courants pour les robots, comme l'exploration rapide de chaque lien sur chaque page. Au lieu de cela, organisez vos scrapers autour d’une file d’attente centrale de pages cibles. Respectez les règles du fichier robots.txt qui indiquent aux robots bien élevés de ne pas entrer. Et ne parcourez pas sans fin la même poignée de pages, encore et encore.

Récupération des 503 inévitables

Parfois, même avec toutes les précautions nécessaires, votre scraper rencontrera toujours une erreur 503. Peut-être que le site a connu une soudaine augmentation de trafic légitime, ou peut-être que certaines de vos demandes ont été acheminées via un serveur surchargé par hasard.

Lorsqu'une requête échoue, ne vous contentez pas de la réessayer immédiatement. Un bombardement de tentatives est un signal de robot important et entraînera probablement le bannissement de votre adresse IP. Utilisez plutôt un intervalle exponentiel :

  1. Attendez 1 seconde et réessayez
  2. Si cela échoue à nouveau, attendez 2 secondes et réessayez
  3. Si cela échoue à nouveau, attendez 4 secondes et réessayez
  4. Si cela échoue à nouveau, attendez 8 secondes et réessayez
  5. Et ainsi de suite, jusqu'à un maximum de 5 tentatives

Voici une fonction Python qui implémente ceci :

import time
import random

def retry_with_exp_backoff(func, max_retries=5):
  for n in range(max_retries):
    try:
      return func()
    except Exception:
      if n == max_retries - 1:
        raise
      sleep_seconds = 2 ** n + random.uniform(0, 1)  
      time.sleep(sleep_seconds)

Le délai fractionnaire aléatoire permet d'échelonner les tentatives afin que vous n'ayez pas un tas de scrapers qui réessayent tous exactement à la même seconde.

Si vous obtenez toujours des 503 après 5 tentatives, il est préférable de continuer pour le moment et de réessayer plus tard. Peut-être accédez-vous à une autre section du site pendant un moment, ou mettez simplement votre scraper en pause. Vous ne voulez pas paraître trop persistant.

L'option nucléaire : utiliser un navigateur sans tête

Pour les sites Web dotés de défenses anti-bots particulièrement agressives, le seul moyen d’éviter les erreurs 503 est parfois de passer en mode furtif complet avec un navigateur sans tête.

Des outils comme Puppeteer et Playwright vous permettent de contrôler un vrai navigateur par programmation. Contrairement à Selenium, ils sont conçus pour fonctionner sans tête par défaut et disposent d'astuces supplémentaires pour imiter le comportement humain :

  • Générer de faux mouvements et clics de souris
  • Randomisation de la taille de la fenêtre et des paramètres de l'appareil
  • Intercepter et modifier les demandes/réponses

C'est ce qui se rapproche le plus de rendre votre grattoir impossible à distinguer d'un utilisateur réel. L’inconvénient est que cela nécessite beaucoup de ressources par rapport à l’envoi de requêtes simples. Mais pour les données critiques sur les sites hostiles aux robots, le compromis en vaut la peine.

Je m’en voudrais de ne pas reconnaître les implications juridiques et éthiques potentielles du contournement des contre-mesures contre les robots d’un site Web.

En général, les tribunaux ont jugé que la suppression d'informations accessibles au public ne violait pas la loi sur la fraude et les abus informatiques. Dans l'affaire historique HiQ Labs contre LinkedIn de 2019, la Cour d'appel du 9e circuit des États-Unis a jugé que la suppression de profils LinkedIn publics ne constituait pas un « accès non autorisé » puisque ces données n'étaient pas derrière une connexion.

Cependant, certaines entreprises ont intenté avec succès des poursuites pour violation du droit d'auteur, violation de propriété, rupture de contrat et autres causes d'action contre les grattoirs Web. Contourner les restrictions techniques pour accéder à un site après avoir reçu une lettre de cessation et d’abstention est particulièrement risqué sur le plan juridique.

Il existe également un argument selon lequel contourner intentionnellement une erreur de limite de débit de 503 pour continuer à marteler un site Web va à l'encontre des normes sociales d'Internet et gaspille les ressources du propriétaire du site. Ce n’est pas parce que vous pouvez le faire que vous devriez le faire.

En tant que scraper Web éthique, vous devez toujours essayer de suivre les règles du fichier robots.txt, d'honorer le contrat implicite des conditions d'utilisation d'un site et d'éviter de surcharger indûment leurs serveurs. Parfois, il est préférable d'essayer de travailler directement avec les propriétaires de sites pour obtenir les données dont vous avez besoin via des moyens approuvés tels que les API et les vidages de données.

L’avenir du Web Scraping par rapport aux défenses anti-bots

Le jeu du chat et de la souris entre les grattoirs Web et les opérateurs de sites Web qui tentent de les bloquer ne montre aucun signe de ralentissement.

Alors que de plus en plus d’entreprises réalisent la valeur des données Web, les incitations à créer des scrapers sophistiqués n’ont jamais été aussi fortes. Dans le même temps, de nombreux sites Web adoptent des mesures anti-bot plus strictes pour se protéger des acteurs malveillants.

Les modèles d’apprentissage automatique sont utilisés des deux côtés : par les scrapers pour apprendre les modèles de navigation humaine et par les sites Web pour apprendre les modèles de requêtes de type robot. Nous verrons probablement cette course aux armements de l’IA s’intensifier, avec des robots essayant d’imiter les humains et des détecteurs de robots essayant de révéler leurs déguisements.

Le paysage juridique autour du web scraping est également en constante évolution, avec de nombreuses questions ouvertes quant à savoir où le scraping franchit la limite de l'accès non autorisé. Nous sommes sûrs de voir d'autres décisions de la CFAA comme HiQ Labs contre LinkedIn qui, espérons-le, apporteront plus de clarté à la communauté du web scraping.

Pour l’instant, l’erreur 503 reste le fléau de l’existence de nombreux scrapers. Mais en comprenant ce que cela signifie, en utilisant des techniques de limitation intelligentes et en empruntant quelques astuces à des robots plus sournois, vous pouvez le surmonter et maintenir le flux de données.

Points clés à retenir pour éviter les erreurs 503

Nous avons parcouru beaucoup de terrain dans cette analyse approfondie des erreurs 503 Service indisponible. Voici les points clés à retenir :

  1. Une erreur 503 signifie que le serveur du site Web fonctionne correctement mais qu'il est surchargé ou indisponible pour traiter votre demande à ce moment-là.

  2. Déterminez toujours si le 503 est réservé à vous ou à l'ensemble du site avant de procéder à un diagnostic plus approfondi.

  3. Les causes les plus courantes des erreurs 503 sont un trop grand nombre de requêtes trop rapides, la maintenance du serveur, la protection DDoS, les règles de pare-feu des applications Web et les CAPTCHA anti-bot.

  4. L'ajout de délais, l'utilisation de la rotation de proxy, l'usurpation d'en-têtes de requête de type humain et différents modèles d'exploration peuvent vous aider à garder votre scraper sous le radar.

  5. Réessayez les requêtes ayant échoué avec un intervalle exponentiel pour gérer les 503 temporaires sans ressembler trop à un robot.

  6. Les navigateurs sans tête comme Puppeteer et Playwright constituent la dernière ligne de défense contre les systèmes anti-bots les plus sophistiqués.

  7. Soyez conscient de la zone grise juridique potentielle autour du contournement des erreurs 503 et des conditions de service.

  8. La course aux armements technologiques entre les web scrapers et les mesures anti-bots ne fera que s’accélérer.

En suivant ces recommandations et en faisant preuve de retenue et de bon sens, vous pouvez surmonter l'erreur 503 et obtenir les données dont vous avez besoin pour alimenter vos applications. Bon grattage !

Prendre part à la conversation

Votre adresse email n'apparaitra pas. Les champs obligatoires sont marqués *