Comment réduire la détection lors du scraping : guide complet

Un guide multicouche complet pour éviter la détection lors du grattage du web - couvrant la rotation IP, les en-têtes HTTP, les empreintes digitales TLS, les empreintes digitales du navigateur, les modèles comportementaux et la gestion de session.

Comment réduire la détection lors du scraping : guide complet

Pourquoi la détection arrive

La détection du grattage sur le Web est un processus à plusieurs niveaux. Les systèmes anti-bot ne comptent pas sur un seul signal — ils combinent la réputation IP, les en-têtes HTTP, Empreintes TLS, empreintes du navigateur, et l'analyse comportementale pour calculer un score de risque. Lorsque ce score dépasse un seuil, vous obtenez bloqué, servi un CAPTCHA, ou alimenté des données trompeuses.

Ce guide offre une approche globale pour réduire la détection à tous les niveaux. Pour un aperçu du fonctionnement de ces systèmes, voir notre article pilier sur comment les systèmes anti-bot détectent les proxies.

Couche 1: Réputation IP et sélection par procuration

Votre adresse IP est la première chose qu'un serveur voit. Les systèmes anti-bot maintiennent des bases de données qui notent les adresses IP par type, historique et comportement.

Sélection du type mandataire

Sélection du type mandataire
Type de procurationRisque de détectionMeilleur pour
RésidentielFaibleLa plupart des travaux de démolition, sites protégés
FAI (Résidence statique)Faible-moyenneLongues sessions, comptes
Centre de donnéesÉlevéSites non protégés, tâches à volume élevé
MobileTrès faibleSites de protection les plus élevés, réseaux sociaux

Pour la plupart des projets de démolition, Proxies résidentielles de ProxyHat offrir le meilleur équilibre entre le faible risque de détection et l'efficacité des coûts. Voir notre détail Comparaison du type de proxy pour des conseils.

Stratégie de rotation de la propriété intellectuelle

# Python: Rotating proxy per request using ProxyHat
import requests
proxy_url = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
proxies = {
    "http": proxy_url,
    "https": proxy_url
}
# Each request through the gateway gets a different IP
for url in urls_to_scrape:
    response = requests.get(url, proxies=proxies, timeout=30)
    process(response)
  • Rotation par demande pour lister les pages et les résultats de recherche.
  • Utiliser des sessions collantes pour les flux multipages (pagination, séquences de connexion).
  • Géo-ciblez vos IP pour correspondre à l'auditoire prévu du site en utilisant Le ciblage de l'emplacement de ProxyHat.

Couche 2: En-têtes HTTP

Les en-têtes HTTP incorrects ou manquants sont l'un des signaux les plus faciles à détecter pour les systèmes anti-bot. Un vrai navigateur envoie 15-20 en-têtes dans un ordre spécifique; un script Python par défaut envoie 3-4.

En-têtes essentiels

# Python: Realistic header set
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,image/apng,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br, zstd",
    "Cache-Control": "max-age=0",
    "Sec-Ch-Ua": '"Chromium";v="131", "Not_A Brand";v="24"',
    "Sec-Ch-Ua-Mobile": "?0",
    "Sec-Ch-Ua-Platform": '"Windows"',
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",
    "Upgrade-Insecure-Requests": "1",
    "Connection": "keep-alive"
}
response = requests.get(url, headers=headers, proxies=proxies)

En-tête Règles de cohérence

  • Match Sec-Ch-Ua avec l'agent utilisateur : Si vous demandez Chrome 131, votre Sec-Ch-Ua doit faire référence à la version 131.
  • Inclure tous les en-têtes Sec-Fetch : Chrome moderne envoie ces sur chaque navigation. Les rater est un signal fort.
  • Définir Accept-Language pour correspondre à votre proxy geo: Un proxy américain avec Accept-Language: ja-JP est suspect.
  • Maintenez l'ordre d'en-tête & #160;: Certains systèmes anti-bot vérifient la commande d'en-tête. Utilisez des bibliothèques qui préservent l'ordre d'insertion.

Calque 3: TLS et HTTP/2 Empreintes digitales

Votre bibliothèque client HTTP produit un unique Empreinte TLS que les systèmes anti-bot vérifient contre votre agent utilisateur revendiqué. Un user-agent Chrome avec une empreinte Python TLS est immédiatement signalé.

Atténuation par langue

Atténuation par langue
LangueBibliothèque par défautRisque de détectionVariante de la valeur du navigateur
Pythondemandes/urllib3Très élevécffi avec imitation
Node.jsaxios/gotÉlevés'est effondré
Alleznet/httpTrès élevéuTLS + transport sur mesure
# Python: Browser-grade TLS with curl_cffi
from curl_cffi import requests as curl_requests
response = curl_requests.get(
    "https://example.com",
    impersonate="chrome",
    proxies={
        "http": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080",
        "https": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
    }
)

Couche 4: Empreinte du doigt du navigateur

Si vous utilisez un navigateur sans tête, anti-bot JavaScript sonde votre empreinte du navigateur — Toile, WebGL, AudioContext, propriétés navigateur. Le principe clé est la cohérence interne:

  • Tous les signaux d'empreintes digitales doivent être d'accord entre eux
  • L'empreinte doit correspondre à vos revendications utilisateur-agent
  • L'empreinte digitale doit changer quand vous faites tourner les proxies

Configuration de vol

// Node.js: Puppeteer with stealth and proxy
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({
  headless: 'new',
  args: [
    '--proxy-server=http://gate.proxyhat.com:8080',
    '--disable-blink-features=AutomationControlled',
    '--window-size=1920,1080'
  ]
});
const page = await browser.newPage();
await page.authenticate({
  username: 'USERNAME',
  password: 'PASSWORD'
});
await page.setViewport({ width: 1920, height: 1080 });

Couche 5 : Modèles comportementaux

Même avec l'imitation technique parfaite, les modèles de comportement de type bot déclencheront la détection. Les systèmes anti-bot analysent le calendrier, les modèles de navigation et les signatures d'interaction.

Demande de calendrier

  • Ajouter des retards aléatoires : Les humains ne font pas de demandes à intervalles exacts. Ajouter 1-5 secondes de retard aléatoire entre les requêtes.
  • Varier les retards par type de page : Les pages de contenu méritent des pauses de « lecture » plus longues que les pages d'inscription.
  • Éviter les éclatements : Ne faites pas 50 demandes rapides puis arrêtez. Distribuez les demandes uniformément avec la variance naturelle.
# Python: Natural request timing
import time
import random
def scrape_with_natural_timing(urls, proxies):
    for url in urls:
        response = requests.get(url, proxies=proxies, headers=headers)
        process(response)
        # Random delay: 1-4 seconds with normal distribution
        delay = max(0.5, random.gauss(2.5, 0.8))
        time.sleep(delay)

Modèles de navigation

  • Suivez les chemins naturels : Visitez la page d'accueil d'abord, puis les pages de catégorie, puis les pages de détail — ne sautez pas directement aux URLs profondes.
  • Définir les en-têtes de référence appropriés : Chaque page doit faire référence à la page précédente.
  • Redirections de la poignée : Suivez les redirections HTTP naturellement plutôt que de réessayer l'URL originale.

Gestion des séances

  • Maintenir les pots à cookies : Accepter et renvoyer les cookies au cours d'une session — le rejet de tous les cookies est un signal bot.
  • Limiter la durée de la session : Après 50-100 requêtes, commencez une nouvelle session avec une nouvelle IP et des cookies.
  • Respecter les limites de taux : Si vous recevez 429 réponses, reculez exponentiellement plutôt que de recommencer immédiatement.

Couche 6 : Validation de la réponse

La détection n'entraîne pas toujours un blocage. Les sites peuvent servir différents contenus, injecter des données trompeuses ou retourner des blocs mous. Validez toujours vos réponses :

  • Vérifier les codes d'état & #160;: 200 ne signifie pas toujours le succès — certains sites retournent 200 avec des pages CAPTCHA ou du contenu vide.
  • Valider la structure du contenu : S'assurer que la réponse contient les éléments attendus (prix des produits, texte de l'article, etc.).
  • Surveillance des pots de miel: Liens cachés ou champs de formation conçus pour attraper des rampeurs automatisés.
  • Taux de réussite du suivi : Si votre taux de réussite est inférieur à 90 %, quelque chose a changé et nécessite une enquête.

Liste de contrôle complète anti-détection

Liste de contrôle complète anti-détection
CalqueDécisionPriorité
IPUtiliser des procurations résidentielles avec géo-cibleCritique
IPRotation des IP par requête ou sessionCritique
En-têtesEnvoyer des ensembles d'en-tête complets et réalistesCritique
En-têtesCorriger la langue acceptée à l'emplacement du mandataireÉlevé
TLSUtiliser la bibliothèque TLS de niveau navigateurCritique
TLSCorrespond à l'empreinte TLS du navigateur revendiquéCritique
NavigateurUtilisez des plugins furtifs pour les navigateurs sans têteÉlevé
NavigateurMaintenir des profils d'empreintes digitales cohérentsÉlevé
ComportementAjouter des retards aléatoires entre les demandesÉlevé
ComportementSuivre les chemins de navigation naturelsMoyenne
ComportementMaintenir les cookies pendant les sessionsMoyenne
ValidationVérifiez le contenu de la réponse, pas seulement les codes d'étatÉlevé

Exemple : Grattoir anti-détection complet

# Python: Complete anti-detection scraper setup
from curl_cffi import requests as curl_requests
import time
import random
class StealthScraper:
    def __init__(self, proxy_user, proxy_pass):
        self.proxy = f"http://{proxy_user}:{proxy_pass}@gate.proxyhat.com:8080"
        self.session = curl_requests.Session(impersonate="chrome")
        self.session.proxies = {
            "http": self.proxy,
            "https": self.proxy
        }
        self.request_count = 0
    def get(self, url, referer=None):
        headers = {}
        if referer:
            headers["Referer"] = referer
        response = self.session.get(url, headers=headers, timeout=30)
        self.request_count += 1
        # Rotate session every 50-80 requests
        if self.request_count >= random.randint(50, 80):
            self._rotate_session()
        # Natural delay
        time.sleep(max(0.5, random.gauss(2.0, 0.6)))
        return response
    def _rotate_session(self):
        self.session = curl_requests.Session(impersonate="chrome")
        self.session.proxies = {
            "http": self.proxy,
            "https": self.proxy
        }
        self.request_count = 0
# Usage
scraper = StealthScraper("USERNAME", "PASSWORD")
home = scraper.get("https://example.com")
listing = scraper.get("https://example.com/products", referer="https://example.com")
detail = scraper.get("https://example.com/products/123", referer="https://example.com/products")

Quand escalader votre approche

Commencez par l'approche la plus simple et augmentez seulement au besoin:

  1. Niveau 1 — Client HTTP + en-têtes + proxy: Fonctionne pour la plupart des sites. Utilisation curl_cffi ou got-scraping avec ProxyHat proxies.
  2. Niveau 2 — Ajouter TLS de qualité navigateur: Requis lorsque le site vérifie les empreintes JA3/JA4.
  3. Niveau 3 — Navigateur sans tête + furtivité: Nécessaire pour le contenu rendu par JavaScript et les systèmes anti-bot sophistiqués.
  4. Niveau 4 — Automatisation complète du navigateur avec imitation comportementale: Réservé pour les sites les plus protégés (Cloudflare Enterprise, PerimeterX, etc.).

Pour les modèles d'implémentation dans des langues spécifiques, consultez nos guides : Python, Node.jset Allez.

Lignes directrices éthiques

Les techniques antidétection sont des outils — leur utilisation éthique dépend du contexte. Toujours :

  • Respecter robots.txt et conditions de service
  • Grape uniquement les données accessibles au public
  • Limiter les taux de requête pour éviter l'impact du serveur
  • Respecter la réglementation en matière de protection des données (RGPD, CCPA)
  • Utilisation pratiques éthiques de grattage comme base de référence
L'objectif de la lutte contre la détection n'est pas de contourner la sécurité légitime. Il est de s'assurer que votre accès automatisé aux données publiques n'est pas incorrectement signalé comme malveillant.

Foire aux questions

Prêt à commencer ?

Accédez à plus de 50M d'IPs résidentielles dans plus de 148 pays avec filtrage IA.

Voir les tarifsProxies résidentiels
← Retour au Blog