Chaque projet de grattage web sérieux touche finalement le même mur : vos demandes commencent à renvoyer CAPTCHAs, 403 erreurs ou pages vides. Les sites Web sont devenus remarquablement bons pour détecter le trafic automatisé, et la course aux armements entre les racleurs et les systèmes anti-bots est plus intense que jamais. Qu'il s'agisse de collecter des données sur les prix, de surveiller le contenu des concurrents ou de créer des ensembles de données pour la formation à l'IA, gratter des sites Web sans être bloqué n'est plus facultatif — il est fondamental pour tout pipeline de données fiable.
Ce guide couvre les raisons techniques derrière les blocs, les signaux de détection modernes systèmes anti-bot chercher, et des stratégies éprouvées pour garder vos racleurs fonctionner en douceur. Nous incluons des exemples de code de travail utilisant Proxies résidentielles montrer comment ces concepts se traduisent par des implémentations prêtes à la production.
Pourquoi les sites Web bloquent les gratte-ciel
Avant de résoudre le problème, il aide à comprendre ce que vous êtes contre. Les sites web déploient des mesures anti-bot pour plusieurs raisons légitimes:
- Protection des infrastructures — Le grattage agressif peut surcharger les serveurs, dégrader les performances des utilisateurs réels et gonfler les coûts d'hébergement.
- Protection du contenu — Les éditeurs, les sites de commerce électronique et les fournisseurs de données veulent empêcher les concurrents de copier leurs données à l'échelle.
- Sécurité — Les schémas de trafic automatisés se chevauchent avec le rembourrage des titres de compétence, les attaques DDoS et le balayage de la vulnérabilité.
- Conformité réglementaire — Les sites traitant des données personnelles peuvent restreindre l'accès automatisé pour se conformer aux règles de confidentialité.
Les sites modernes comptent sur des services anti-bot spécialisés comme Cloudflare Bot Management, Akamai Bot Manager, PerimeterX et DataDome. Ces services analysent le trafic en temps réel en utilisant une combinaison de signaux, et ils partagent l'intelligence à travers leurs réseaux, ce qui signifie qu'un modèle signalé sur un site peut déclencher des blocs à travers des milliers d'autres.
Signal de détection qui vous bloque
Les systèmes anti-bots comptent rarement sur un seul indicateur. Ils établissent un score de risque à partir de signaux multiples et bloquent les demandes qui dépassent un seuil. Voici les vecteurs de détection clés:
Réputation d'adresse IP
C'est le signal le plus fondamental. Les plages IP des centres de données sont bien documentées et comportent des cotes de risque intrinsèquement plus élevées. Si vos demandes proviennent d'AWS, de Google Cloud ou de tout fournisseur d'hébergement connu, de nombreux systèmes anti-bot vont les contester ou les bloquer immédiatement. Même avec PI résidentielle, envoyer trop de demandes d'une seule adresse va l'obtenir signalé . Les bases de données de réputation IP sont mises à jour en temps réel, et une IP brûlée peut rester sur la liste noire pendant des semaines.
Analyse des taux et des profils de demande
Les humains ne demandent pas 50 pages par seconde avec des intervalles parfaitement uniformes. Les systèmes anti-bot suivent la fréquence des demandes, les modèles de chronométrage et le débit de navigation. Le scraping qui suit une trajectoire parfaitement séquentielle à travers des résultats paginés — avec des retards identiques entre les demandes — semble mécanique même si le taux est prudent.
Empreinte HTTP
Chaque client HTTP a une empreinte digitale distinctive basée sur la combinaison d'en-têtes qu'il envoie : l'ordre des en-têtes, les caractéristiques de la poignée de main TLS (empreintes digitalesJA3/JA4), les cadres de paramètres HTTP/2 et les valeurs d'en-tête. Un python requests bibliothèque a une empreinte complètement différente de Chrome. Les systèmes anti-bot tiennent des bases de données des empreintes digitales connues du navigateur et signalent tout ce qui ne correspond pas.
Empreintes digitales du navigateur et défis JavaScript
Les systèmes anti-bot avancés servent les défis JavaScript qui inspectent l'environnement du navigateur : rendu de toile, capacités WebGL, polices installées, résolution d'écran, fuseau horaire, préférences linguistiques, et des centaines d'autres signaux. Des navigateurs sans tête comme Puppeteer et Playwright peuvent être détectés par des différences subtiles — plugins de navigateur manquants, descripteurs de propriété incorrects sur des objets navigateurs, ou l'absence de comportements de rendu attendus.
Analyse comportementale
Certains systèmes suivent les mouvements de souris, les motifs de défilement et le comportement de clic. Une session qui navigue directement sur les pages lourdes de données sans visiter la page d'accueil d'abord, ou qui ne déplace jamais la souris, signale l'automatisation.
| Signal de détection | Niveau de risque | Difficulté d'atténuation | Défense primaire |
|---|---|---|---|
| Plage IP de Datacenter | Critique | Facile | Utiliser des procurations résidentielles |
| Taux de demande élevé | Élevé | Facile | Taux limite + retards aléatoires |
| En-têtes manquants/mauvaises | Élevé | Moyenne | Profils d'en-tête réalistes |
| Inadéquation des empreintes digitales TLS | Élevé | Dur | Bibliothèques d'empreintes digitales TLS |
| Défaut de défi JavaScript | Critique | Dur | Navigateur réel (Playwright/Puppeteer) |
| Anomalies comportementales | Moyenne | Dur | Simulation d'interactions humaines |
| Anomalies des cookies/session | Moyenne | Moyenne | Gestion appropriée des sessions |
Stratégies pour scratper sans se faire bloquer
1. Utilisez les proxies résidentielles pour la rotation IP
La défense la plus efficace contre le blocage par IP est d'acheminer vos demandes à travers Proxies résidentielles. Les IP résidentielles appartiennent à de vrais FAI et ont la même réputation que les connexions Internet domestiques régulières. Les systèmes anti-bots ne peuvent pas bloquer les gammes résidentielles sans affecter les utilisateurs légitimes.
Une rotation proxy efficace signifie l'attribution d'une IP différente à chaque requête ou petit lot de requêtes. Pour le grattage dépendant de la session (où vous devez maintenir l'état de connexion ou naviguer les flux multi-pages), utilisez des sessions collantes qui gardent la même IP pendant une durée définie avant de tourner.
ProxyHat fournit une rotation automatique avec contrôle de session configurable. Vous pouvez cibler les IP depuis certains pays, états ou villes d'accéder au contenu géo-restricté tout en conservant des scores de confiance de qualité résidentielle.
2. Craft Realistic HTTP En-têtes
Les en-têtes par défaut de grattage des bibliothèques sont un cadeau mort. Une demande de Python requests la bibliothèque envoie User-Agent: python-requests/2.31.0 — qui l'affiche immédiatement comme automatique. Construire des profils d'en-tête qui correspondent exactement aux navigateurs réels :
- Définir un courant, complet
User-Agentchaîne correspondant à une vraie version du navigateur - Inclure
Accept,Accept-Language,Accept-EncodingetSec-CH-UAentêtes - Correspondez à l'ordre d'en-tête du navigateur que vous utilisez
- Rotation entre plusieurs profils de navigateur pour éviter une seule empreinte digitale
- Inclure une
Refereren-tête (par exemple, une page de résultats du moteur de recherche)
3. Mettre en œuvre la limitation intelligente des tarifs
Des retards uniformes sont presque aussi suspects qu'aucun retard. Mettre en oeuvre des délais randomisés qui suivent une distribution réaliste :
- Délai de base de 2 à 5 secondes entre les demandes
- Ajouter au hasard plus ou moins 30-50%
- Insérer des pauses plus longues (15-30 secondes) toutes les 20-50 demandes
- Réduire la concordance par domaine — 2-3 demandes parallèles maximum
- Implémenter une rétrocession exponentielle lorsque vous recevez des signaux à limite de vitesse (429 codes d'état)
4. Gérer correctement les sessions et les cookies
De nombreux sites Web assignent des cookies de suivi lors de la première visite et s'attendent à ce qu'ils soient sur demande ultérieure. Un racleur qui n'envoie jamais de cookies, ou qui envoie de nouveaux cookies sur chaque demande, déclenche une détection d'anomalie. Maintenez un pot à cookies par session et transportez les cookies sur toutes les demandes dans une session de navigation logique.
5. Poignez le contenu rendu par JavaScript
Pour les sites nécessitant une exécution JavaScript, utilisez un vrai moteur de navigateur via Playwright ou Puppeteer. Mais exécuter des navigateurs sans tête sans précautions est facilement détecté. Les principales étapes de durcissement sont les suivantes :
- Utilisation
playwright-extraoupuppeteer-extraavec plugins furtifs - Définir une taille de viewport réaliste (pas la taille par défaut 800x600)
- Activer WebGL et injecter des chaînes de rendu GPU cohérentes
- Définissez timezone et local pour correspondre à l'emplacement géographique de votre proxy
- Ajouter des mouvements aléatoires de souris et faire défiler les actions avant d'extraire des données
6. Respecter robots.txt et mettre en œuvre Backoff
Alors que robots.txt n'est pas juridiquement contraignant dans toutes les juridictions, le respect de celui-ci démontre la bonne foi. Plus concrètement, les sites qui vous voient ignorer robots.txt sont plus susceptibles d'implanter le blocage agressif. Toujours implémenter la sauvegarde automatique lorsque vous recevez 429 (Trop de demandes) ou 503 (Service Indisponible) réponses — ce sont des signaux explicites pour ralentir.
Exemples de codes : Scraping with ProxyHat Residential Proxies
Les exemples suivants montrent comment configurer la rotation proxy résidentielle avec des en-têtes réalistes. Chaque exemple utilise le SDK ProxyHat pour la langue respective. Pour pleine Documentation API, voir les documents ProxyHat.
Exemple de Python
Installez le SDK : pip install proxyhat (GitHub)
import time
import random
from proxyhat import ProxyHatClient
client = ProxyHatClient(
api_key="your_api_key",
country="US",
session_type="rotating", # New IP per request
)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Sec-CH-UA": '"Chromium";v="131", "Not_A Brand";v="24"',
"Sec-CH-UA-Mobile": "?0",
"Sec-CH-UA-Platform": '"Windows"',
}
urls = [
"https://example.com/page/1",
"https://example.com/page/2",
"https://example.com/page/3",
]
for url in urls:
response = client.get(url, headers=headers)
print(f"{response.status_code} - {url} via {response.proxy_ip}")
# Randomized delay: 2-5 seconds with jitter
delay = random.uniform(2.0, 5.0)
time.sleep(delay)
Exemple de Node.js
Installez le SDK : npm install @proxyhat/sdk (GitHub)
const { ProxyHatClient } = require("@proxyhat/sdk");
const client = new ProxyHatClient({
apiKey: "your_api_key",
country: "US",
sessionType: "rotating",
});
const headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
Accept:
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
};
const urls = [
"https://example.com/page/1",
"https://example.com/page/2",
"https://example.com/page/3",
];
async function scrape() {
for (const url of urls) {
const response = await client.get(url, { headers });
console.log(`${response.status} - ${url} via ${response.proxyIp}`);
// Randomized delay between requests
const delay = 2000 + Math.random() * 3000;
await new Promise((r) => setTimeout(r, delay));
}
}
scrape();
Go Exemple
Installez le SDK : go get github.com/ProxyHatCom/go-sdk (GitHub)
package main
import (
"fmt"
"math/rand"
"time"
proxyhat "github.com/ProxyHatCom/go-sdk"
)
func main() {
client := proxyhat.NewClient(&proxyhat.Config{
APIKey: "your_api_key",
Country: "US",
SessionType: proxyhat.Rotating,
})
headers := map[string]string{
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
}
urls := []string{
"https://example.com/page/1",
"https://example.com/page/2",
"https://example.com/page/3",
}
for _, url := range urls {
resp, err := client.Get(url, proxyhat.WithHeaders(headers))
if err != nil {
fmt.Printf("Error: %v\n", err)
continue
}
fmt.Printf("%d - %s via %s\n", resp.StatusCode, url, resp.ProxyIP)
// Randomized delay: 2-5 seconds
delay := time.Duration(2000+rand.Intn(3000)) * time.Millisecond
time.Sleep(delay)
}
}
Sessions collantes pour les flux multi-pages
Certaines tâches de grattage nécessitent le maintien de la même adresse IP pour plusieurs requêtes, par exemple, la navigation d'une liste de produits paginés, la tenue d'une session connectée ou la préparation d'un formulaire en plusieurs étapes. ProxyHat prend en charge les sessions collantes qui détiennent la même IP résidentielle pour une durée configurable.
# Python: Sticky session example
from proxyhat import ProxyHatClient
client = ProxyHatClient(
api_key="your_api_key",
country="DE",
session_type="sticky",
session_ttl=300, # Same IP for 5 minutes
)
# All requests within the session use the same IP
response1 = client.get("https://example.com/login", headers=headers)
response2 = client.post("https://example.com/login", data=credentials, headers=headers)
response3 = client.get("https://example.com/dashboard", headers=headers)
print(f"Session IP: {response1.proxy_ip}") # Same IP for all three requests
Erreurs courantes qui déclenchent des blocs
Même les développeurs expérimentés font ces erreurs. Chacun peut graver via la bande passante proxy et obtenir des IP marqués inutilement:
- Utilisation des en-têtes de bibliothèque par défaut — Les
python-requestsLa chaîne User-Agent est sur chaque blocklist. Toujours définir des en-têtes personnalisés. - Ignorer les empreintes digitales TLS — Vos en-têtes peuvent dire "Chrome" mais votre poignée de main TLS dit "Python". Utiliser des bibliothèques comme
curl_cffioutls-clientCe qui fait passer pour les empreintes TLS du vrai navigateur. - Scraping trop rapide lors du lancement initial - Commencez lentement. Ramp up taux de demande progressivement sur les heures, pas minutes.
- Ne pas traiter les erreurs avec grâce — Réessayer les requêtes bloquées immédiatement avec la même configuration gaspille la bande passante et confirme que vous êtes un bot. Mettre en place des sessions de sauvegarde et de commutation de proxy sur les erreurs.
- Réutiliser les IP brûlés — Si une requête renvoie une page CAPTCHA ou un bloc, cette IP est compromise pour cette cible. Retournez immédiatement à une nouvelle session.
- Ignorer la cohérence géographique — Envoi de demandes d'une IP américaine avec
Accept-Language: jaet un décalage horaire de +9 semble suspect. Correspondez vos en-têtes et les paramètres du navigateur à ceux de votre proxy lieu. - Non suivi des taux de réussite — Sans suivre votre taux de blocage, vous ne pouvez pas dire si votre stratégie fonctionne. Enregistrez chaque état de réponse et alerte sur les baisses de taux de réussite.
Techniques avancées pour les cibles de haute valeur
randomisation des empreintes digitales
Pour les sites fortement protégés, faire pivoter non seulement les IP, mais les profils entiers des empreintes digitales du navigateur. Chaque session devrait comporter une combinaison cohérente d'utilisateurs-agents, de résolution d'écran, de fuseau horaire, de langue et de plate-forme, et ces combinaisons devraient correspondre à des combinaisons réalistes. Un Utilisateur-Agent Windows avec une chaîne de plate-forme Linux est un drapeau rouge évident.
Demande de simulation de chaîne
Les utilisateurs réels ne sautent pas directement sur les pages de produits. Ils arrivent des moteurs de recherche, naviguent sur les pages de catégorie et suivent les liens internes. Construisez votre racleur pour simuler des chemins de navigation réalistes : chargez la page d'accueil, suivez les liens vers les pages de catégorie, puis accédez aux données cibles. Cela génère un modèle de session crédible.
Considérations relatives à l'échafaudage
Le grattage des moteurs de recherche a des défis uniques parce que Google, Bing, et d'autres ont une détection de bot particulièrement agressive. Les procurations résidentielles sont essentielles pour être fiables Suivi SERP, et vous devriez distribuer les demandes à plusieurs endroits géographiques pour éviter de déclencher des limites de taux de n'importe quelle région.
Choisir le bon type de procuration
Tous les travaux de grattage n'ont pas besoin de procurations résidentielles. Le bon choix dépend des défenses de votre cible et de votre budget. Voir notre comparaison détaillée des types de proxy pour une plongée profonde. Voici une matrice de décision rapide :
| Cas d'utilisation | Type de mandataire recommandé | Motifs |
|---|---|---|
| Dégraissage général du réseau | Rotation résidentielle | Meilleur équilibre de confiance et de coût |
| Surveillance des prix du commerce électronique | Rotation résidentielle | Haute protection anti-bot sur la plupart des détaillants |
| Suivi SERP | Géo-cible résidentiel | Les moteurs de recherche bloquent les IP de datacenter agressivement |
| La démolition des médias sociaux | Proxies mobiles | La plus grande confiance pour les plateformes qui attendent le trafic mobile |
| Accès public aux API | Centre de données | Faible risque anti-bot, option moins chère |
| Sites de sneaker/ticket | Sticky résidentiel | La persévérance de la séance avec la confiance résidentielle |
Pour la plupart des projets de démolition, les proxies résidentielles tournantes offrent la meilleure combinaison de fiabilité et de rentabilité. Prix ProxyHat est basé sur la consommation de bande passante, donc vous ne payez que pour le transfert de données réussi.
A emporter des clés
- Les procurations résidentielles sont la fondation — Les IP Datacenter sont bloqués immédiatement sur la plupart des sites protégés. Les PI résidentielles ont une confiance naturelle.
- Les en-têtes comptent autant que les IP — Une IP résidentielle avec en-têtes Python par défaut est toujours bloquée. Construire des profils d'en-tête complets et réalistes.
- Tout randomiser — Retards, combinaisons d'en-têtes, chemins de navigation. Les modèles prévisibles sont des modèles détectables.
- Surveiller et adapter — Suivez votre taux de réussite. Lorsque les blocs augmentent, étudier et ajuster avant de brûler à travers votre pool de proxy.
- Correspond à votre empreinte digitale — Chaque signal doit raconter une histoire cohérente : l'utilisateur-agent, l'empreinte TLS, le fuseau horaire, la langue et l'emplacement géographique doivent s'aligner.
- Commencez lentement, échellez progressivement — Commencez par des limites de taux prudentes et augmentez seulement après avoir confirmé votre configuration fonctionne de manière fiable.
- Utilisez des sessions collantes pour les flux d'état — Les séquences de connexion et la navigation multipages nécessitent une cohérence IP. Utilisez des séances collantes avec des TTL appropriés.
Foire aux questions
Comment savoir si mon racleur est bloqué ?
Les signes courants comprennent la réception de codes d'état HTTP 403 ou 429, la réorientation vers les pages CAPTCHA, l'obtention de corps de réponse vides où vous attendez du contenu HTML, ou la réception de contenu différent de ce que vous voyez dans un navigateur régulier. Surveillez les codes d'état de votre réponse et la longueur du contenu — une chute soudaine de la taille moyenne de la réponse indique souvent des blocs mous où le site retourne une page de défi au lieu du contenu réel.
Les procurations résidentielles sont-elles suffisantes pour éviter tous les blocs?
Les mandataires résidentiels éliminent le blocage par IP, qui est la méthode de détection la plus courante, mais ils ne sont pas une solution complète à eux seuls. Vous avez encore besoin d'en-têtes réalistes, de limites de taux appropriées et de gestion de session. Pensez aux proxies résidentielles comme la fondation — ils résolvent le problème le plus difficile (la réputation IP), mais les autres couches de votre pile de graissage doivent également être solides. Pour les sites les plus protégés, combiner les proxies résidentielles avec l'empreinte digitale du navigateur en utilisant des outils comme curl_cffi ou un dramaturge à configuration furtive.
Combien de demandes par seconde puis-je envoyer sans être bloqué ?
Il n'y a pas de réponse universelle car elle dépend des défenses du site Web cible. Comme point de départ conservateur, limitez-vous à 1 requête toutes les 2-5 secondes par domaine avec des IP tournantes. Pour les sites moins protégés, vous pouvez augmenter progressivement à 5-10 demandes simultanées. Pour les sites fortement protégés comme Google ou Amazon, rester sous 1 demande par 3 secondes, même avec des procurations résidentielles. Toujours augmenter progressivement et surveiller votre taux de réussite — si elle tombe en dessous de 95 %, vous allez trop vite.
Quelle est la différence entre les sessions de procuration tournantes et collantes?
Les sessions tournantes attribuent une nouvelle adresse IP à chaque requête, ce qui est idéal pour la suppression de pages indépendantes où aucun état ne doit persister entre les requêtes. Les sessions collantes maintiennent la même IP pour une durée configurée (généralement de 1 à 30 minutes), ce qui est nécessaire pour les flux de connexion, la navigation paginée ou tout processus en plusieurs étapes où le serveur suit votre IP. Utilisez des sessions tournantes par défaut et passez à collant seulement lorsque votre cas d'utilisation nécessite spécifiquement la continuité de session.
La suppression de toile est-elle légale ?
La légalité du retrait du Web varie selon la juridiction, le type de données recueillies et la façon dont elles sont utilisées. Aux États-Unis, la décision 2022 hiQ Labs c. Dans sa décision, le Tribunal a établi que la suppression de données accessibles au public ne viole pas la Loi sur la fraude et l'abus informatiques. Dans l'UE, le RGPD s'applique aux données à caractère personnel quelle que soit la manière dont elles sont collectées. En règle générale, la suppression de données non personnelles accessibles au public à des fins commerciales légitimes est largement acceptée. Toujours examiner les Conditions d'utilisation d'un site Web, respecter robots.txt comme une courtoisie, et consulter un avocat pour votre cas d'utilisation spécifique.






