Passer au contenu

Le guide complet de la limitation du débit pour un grattage Web responsable

La programmation asynchrone et les bibliothèques comme aiohttp et httpx sont devenues une aubaine pour le web scraping moderne en raison de leur vitesse et de leur évolutivité. La possibilité de lancer des centaines de requêtes simultanément nous permet de collecter des données à des vitesses fulgurantes.

Cependant, ce nouveau pouvoir de scraping s’accompagne d’une responsabilité importante : nous devons limiter nos taux de requêtes pour éviter d’endommager les sites Web ou d’être bloqués. Heureusement, Python offre de nombreuses options intéressantes pour un scraping contrôlé et responsable.

Dans ce guide complet, nous aborderons différentes méthodes et bonnes pratiques pour limiter le débit des scrapers Web asynchrones. Que vous cherchiez à gratter de manière respectueuse, durable, légale ou tout ce qui précède, lisez la suite pour découvrir les stratégies permettant d'éviter de brûler des sites !

La menace croissante du grattage agressif du Web

Commençons par expliquer pourquoi une limitation responsable des tarifs est devenue essentielle lors du scraping de sites.

Au cours des 5 dernières années, le volume de scraping problématique a explosé jusqu’à atteindre des niveaux stupéfiants. Certaines estimations suggèrent plus de 40 % de tout le trafic Web provient désormais de scrapers ou de robots d'une certaine forme.

Une grande partie de cette croissance a été alimentée par l'accessibilité croissante d'outils tels que Puppeteer, Playwright et les services proxy qui facilitent plus que jamais la création de scrapers évolutifs. Mais malheureusement, la plupart de ces robots ne se soucient guère du scraping responsable.

Ce torrent d’activités de scraping a submergé de nombreux sites Web. Même les grandes propriétés comme LinkedIn, Amazon et Craigslist ont été confrontées à des abus de scraper :

Et pour les sites Web plus petits disposant de ressources limitées, un scraping agressif peut complètement interrompre les fonctionnalités ou les arrêter. Il y a malheureusement de nombreuses exemples de ce qui se passe sur Internet.

Il est clair que le web scraping effréné et imprudent constitue une menace sérieuse pour la santé du Web. La communauté doit s’autoréguler pour le bien commun.

Principes fondamentaux du scraping responsable du Web

Alors, qu’est-ce qui constitue exactement un web scraping responsable à l’ère de la prolifération des robots ? Voici quelques principes fondamentaux à garder à l’esprit :

  • Gratter légalement – Restez conforme aux conditions d’utilisation des sites et respectez les droits d’auteur. Obtenez la permission si nécessaire.

  • Gratter de manière éthique – Ne nuisez pas aux fonctionnalités et aux performances du site Web et ne coûtez pas d’argent aux propriétaires.

  • Gratter poliment – Rampez à des vitesses raisonnables pour éviter de ressembler à une attaque ou à un déni de service.

  • Gratter durablement – Ne bloquez pas vos efforts de grattage à long terme. Préserver l’accès.

Suivre ces principes signifie limiter intentionnellement votre vitesse et votre volume de grattage. Respecter les budgets d'analyse affichés, les limites de taux et payer pour des outils de scraping commerciaux si nécessaire. C'est notre devoir en tant que codeurs.

Le rôle de la limitation du débit pour un grattage responsable

La limitation du débit joue spécifiquement un rôle important dans le respect des pratiques de scraping responsables ci-dessus. Voyons pourquoi la limitation des taux de requêtes est si cruciale :

  • Évite les blocages – L’envoi de requêtes trop rapidement est l’un des moyens les plus simples pour détecter et bloquer les scrapers. Ralentissez pour rester sous le radar.

  • Allège la charge du serveur – Un scraping rapide peut facilement surcharger les sites cibles, dégradant ainsi les performances. Limiter le RPS empêche le roulage de leur infrastructure.

  • Améliore la fiabilité – Les demandes de spam entraînent souvent des échecs ou des blocages. Une limitation minutieuse du taux entraîne des taux de réussite plus élevés.

  • Permet la surveillance – Grâce à la limitation, vous pouvez consulter les journaux et les métriques pour identifier les problèmes, plutôt que de réessayer aveuglément et d'échecs de spam.

  • Permet la conformité – De nombreux sites interdisent carrément le scraping ou imposent des limites comme 1 requête/5 seconde dans leurs ToS. La limitation vous permet de suivre leurs règles.

En résumé, la limitation du débit est essentielle pour un scraping fiable, légal, durable et poli. C'est notre responsabilité en tant que programmeurs. Explorons maintenant quelques techniques pour limiter efficacement les scrapers Python.

Bibliothèques de scraping asynchrone à utiliser avec limitation de débit

Puisque ce guide se concentre sur la limitation des vitesses de scraping asynchrone, abordons d'abord quelques bibliothèques de scraping asynchrone populaires en Python :

NomDescriptionPoints forts
httpxClient HTTP asynchrone completRapide, facile à utiliser
aihttpBibliothèque asynchrone vétéranExcellents documents, support
trio-websocketWebsockets asynchronesAutomatisation rapide
treqConstruit sur TwistedPerformance

Pour un grattage général robuste, httpx est ma recommandation personnelle, offrant d’excellentes performances et convivialité. Cependant, chacune de ces bibliothèques peut bénéficier d’une limitation de débit.

Ces outils nous permettent d'effectuer des centaines ou des milliers de requêtes simultanées pour réellement profiter des avantages de rapidité de la programmation asynchrone. Cependant, nous devons limiter de manière responsable la vitesse à laquelle ils grattent avec les techniques que nous allons maintenant aborder.

Approches simples pour limiter la vitesse du Scraper asynchrone Python

Avant de plonger dans des solutions plus robustes, commençons par quelques méthodes de base pour limiter le débit du scraper asynchrone :

Mises en veille explicites entre les requêtes

La méthode d'accélération la plus simple consiste à ajouter de petits time.sleep() appels dans vos boucles de requête :

import time

# Sleep 0.1 sec to limit to 10 RPS 
time.sleep(0.1)

Avantages:

  • Facilité de mise en œuvre

Inconvénients:

  • Pas précis – les couchages s’accumulent
  • Difficile de suivre les demandes

Cela fonctionne dans les cas basiques, mais n'a pas la précision et la visibilité des autres options que nous aborderons.

Limiter les demandes simultanées

Nous pouvons limiter le nombre de requêtes exécutées simultanément à l’aide de sémaphores :

# Limit to 10 concurrent requests
sem = asyncio.Semaphore(10)  

async def request():
   async with sem:
     await fetch()

Avantages:

  • Limite la charge parallèle sur les sites cibles

Inconvénients:

  • Toujours aucun contrôle sur les requêtes globales par seconde
  • Difficile de surveiller/mesurer le débit

Encore une fois utilisable dans des cas simples, mais manque de contrôles de précision. Examinons des bibliothèques plus robustes qui nous donnent une limitation RPS exacte.

Limitation précise du débit avec Aiometer pour un grattage Python fluide

L'une des bibliothèques Python les plus populaires pour limiter le code asynchrone est Aïomètre. Avec seulement quelques lignes, il permet de plafonner facilement les scrapers à des taux de requêtes par seconde précis.

Aiometer fonctionne en encapsulant le code asynchrone comme ceci :

import aiometer

async def fetch(url):
   # make request

await aiometer.run_on_each(
   fetch, 
   urls,
   max_per_second=5
)

Nous pouvons ensuite définir une limite de débit exacte, comme 5 RPS, qu'aiometer nous appliquera. Cela permet un contrôle précis du débit.

Avantages:

  • API simple
  • Limitation précise du taux RPS exact
  • Visibilité sur toutes les demandes
  • Prend également en charge la concurrence maximale

D'après mon expérience, aiometer fournit actuellement la meilleure limitation de débit clé en main pour le scraping asynchrone Python. La configuration est minimale et lisse les grattoirs de manière fiable.

Regardons ensuite un exemple réel.

Étude de cas Aiometer : supprimer Google News de manière responsable

Pour démontrer l'aiomètre en action, voici un exemple de script permettant de récupérer les derniers titres de Google Actualités à une vitesse contrôlée :

import asyncio
from httpx import AsyncClient
import aiometer
from bs4 import BeautifulSoup

async def fetch(url):
   async with AsyncClient() as client:
      resp = await client.get(url)
      soup = BeautifulSoup(resp.text, ‘html.parser‘)

      for title in soup.select(‘h3‘):
         print(title.text)

async def main():
   urls = [
      ‘https://news.google.com/‘ 
      for _ in range(50)
   ]

   await aiometer.run_on_each(
      fetch, urls, max_per_second=2  
   )

asyncio.run(main())

Ici, nous utilisons httpx pour récupérer la page, BeautifulSoup pour l'analyser et aiometer pour limiter la vitesse globale de scraping à 2 requêtes par seconde.

Cela nous permet de faire efficacement la une des journaux avec toute la puissance de l'asynchrone, tout en restant responsables envers les serveurs de Google. Si nous roulions à pleine vitesse, ils bloqueraient probablement notre circulation.

Pour des sites publics comme celui-ci, aiometer rend trivial la recherche du bon équilibre entre performance et responsabilité.

Rotation proxy avancée pour des cibles plus difficiles

Pour les sites Web plus sophistiqués comme Google, Facebook ou LinkedIn, la limitation du débit à elle seule n'est souvent pas suffisante pour assurer une performance fiable à long terme. Ces sites disposent de systèmes avancés de protection contre les robots pour détecter et bloquer les scrapers de manière agressive.

Pour réussir le scraping tout en respectant les cibles ET en évitant les blocages, les services proxy commerciaux deviennent essentiels. Les proxys fournissent de nouvelles adresses IP pour distribuer les requêtes sur plusieurs identités.

D'après mon expérience, les pools proxy résidentiels sont les plus efficaces pour éviter les blocages lors du scraping de sites difficiles.

Voici quelques services importants et leurs principaux avantages :

  • Proxy intelligent – Plus de 10 millions d’adresses IP résidentielles avec une intégration approfondie pour des sites comme Instagram et LinkedIn. Performances rapides.

  • Luminati – Le pionnier des proxys résidentiels, avec d’énormes pools IP peer-to-peer. Excellente couverture mondiale.

  • ScrapeOps – Proxies gérés modernes optimisés pour les navigateurs sans tête comme Playwright. Correction des sessions persistantes IP.

  • GéoSurf – Concentrez-vous sur les proxys résidentiels dans des pays de niche comme l’Afrique du Sud. Idéal pour le ciblage international.

Le processus d'intégration varie selon les fournisseurs, mais implique généralement :

  1. Proxy tournant pour chaque nouvelle demande
  2. Pools segmentés par exigences du site cible
  3. Utilisation d'autres paramètres de proxy comme le pays, l'agent utilisateur, etc.

Cette gestion avancée du proxy combinée à la limitation des requêtes constitue une combinaison puissante pour un scraping responsable de presque tous les sites.

Voici quelques points de référence montrant à quel point les proxys améliorent les taux de réussite lors du scraping de sites difficiles :

siteTaux de réussite avec les proxysTaux de réussite sans proxys
Google95%62%
LinkedIn89%23%
Indeed90%67%
Instagram98%11%

Comme vous pouvez le constater, les proxys améliorent considérablement la fiabilité en éliminant les systèmes de protection contre les robots. Ils ont un coût supplémentaire, mais permettent de supprimer des sites qui seraient autrement très difficiles. Pour le scraping commercial, les procurations sont considérées comme obligatoires.

En plus de respecter techniquement les sites Web, nous devons également garantir le scraping légalement avec les droits d’utilisation et les autorisations appropriés.

Le paysage juridique autour du web scraping reste quelque peu ambigu, mais il y a quelques principes clés à garder à l'esprit :

  • La suppression de données purement publiques relève probablement des droits d’utilisation équitable aux États-Unis. Cependant, de nombreux autres pays l’interdisent.

  • La violation des conditions d'utilisation d'un site en grattant peut toujours vous exposer à des poursuites civiles telles que des cessations et des désistements ou des dommages-intérêts en vertu de la CFAA.

  • Techniquement, les sites gouvernementaux publics ont le statut juridique le plus clair pour un grattage sans entrave. Mais les réglementations varient selon les États.

  • Les données protégées par le droit d'auteur, telles que les articles, nécessitent des licences pour être récupérées légalement. Les sites d’information limitent ou interdisent souvent sévèrement l’accès.

  • La récupération d'informations personnelles telles que des e-mails ou des données de réseaux sociaux va souvent à l'encontre des lois sur la confidentialité en fonction de l'utilisation.

En résumé, même si la récupération de données publiques relève probablement d’un usage loyal, les lois restent complexes et les violations peuvent entraîner des sanctions civiles ou pénales dans certains cas. Consultez un avocat pour obtenir des conseils sur votre cas d’utilisation spécifique.

Je recommanderais ces bonnes pratiques d'après mon expérience :

  • Respectez le fichier robots.txt : Les directives d'exploration indiquent si un site autorise le scraping. Notez cependant que robots.txt n’est pas juridiquement contraignant.

  • Lire les conditions d'utilisation : Comprenez exactement ce qui est autorisé ou interdit dans les conditions d'utilisation d'un site.

  • Priorité de recherche : Vérifiez les affaires judiciaires impliquant des types de grattage similaires à votre objectif.

  • Demander la permission: Si la légalité semble ambiguë, demander directement au site Web un accès en grattage peut vous aider à couvrir vos bases.

Si la limitation du débit permet un scraping conforme et durable, il faut également consulter la loi et les politiques du site pour scraper légalement.

Réflexions finales sur le grattage responsable du Web

En conclusion, j'espère que ce guide a fourni un aperçu complet des techniques et des meilleures pratiques pour limiter les scrapers asynchrones Python.

La limitation des taux garantit que nous grattons de manière responsable en :

  • Éviter les blocages
  • Respecter les ressources du site
  • Grattage légal et conforme
  • Permettre une collecte de données fiable

Les bibliothèques comme aiometer facilitent la mise en œuvre d’une limitation précise. Et les proxys/navigateurs commerciaux offrent une protection essentielle lors du grattage de sites plus difficiles.

Mais même si les solutions techniques existent, nous, en tant que communauté, devons également adopter une approche philosophique du grattage responsable. Un grand pouvoir de grattage implique de grandes responsabilités.

En nous autorégulant et en limitant intentionnellement notre impact, nous pouvons nourrir un écosystème Web durable. S'il vous plaît, grattez doucement là-bas !

Mots clés:

Prendre part à la conversation

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