Perché succede la rilevazione
Il rilevamento del raschiamento del Web è un processo multistrato. I sistemi anti-bot non si basano su un singolo segnale — combinano la reputazione IP, le intestazioni HTTP, Impronte TLS♪ impronte del browser, e l'analisi comportamentale per calcolare un punteggio di rischio. Quando tale punteggio supera una soglia, si ottiene bloccato, servito un CAPTCHA, o alimentato dati fuorvianti.
Questa guida fornisce un approccio completo per ridurre il rilevamento su tutti i livelli. Per una panoramica di come questi sistemi funzionano, vedere il nostro articolo pilastro come i sistemi anti-bot rilevano i proxy.
Livello 1: Riputazione IP e Selezione proxy
Il tuo indirizzo IP è la prima cosa che un server vede. I sistemi anti-bot mantengono database che segnano indirizzi IP per tipo, storia e comportamento.
Selezione tipo proxy
| Tipo di proxy | Rischio di rilevamento | Migliore per |
|---|---|---|
| Residenziale | Basso | La maggior parte delle attività di raschiamento, siti protetti |
| ISP (Static Residential) | Basso medio | Sessioni lunghe, conti |
| Datacenter | Alto | Siti non protetti, attività ad alto volume |
| Mobile | Molto basso | Siti di protezione più elevati, social media |
Per la maggior parte dei progetti di raschiamento, I proxy residenziali di ProxyHat offrire il miglior equilibrio di basso rischio di rilevamento ed efficienza dei costi. Guarda i dettagli confronto tipo proxy per la guida.
Strategia di Rotazione IP
# 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)
- Ruota per richiesta per l'elenco di pagine e risultati di ricerca.
- Utilizzare sessioni appiccicose per flussi multi-pagina (paginazione, sequenze di login).
- Geo-target il tuo IP per soddisfare il pubblico atteso del sito utilizzando Obiettivo della posizione di ProxyHat.
Livello 2: HTTP Heads
Le intestazioni HTTP non corrette o mancanti sono uno dei segnali più semplici per i sistemi anti-bot da rilevare. Un vero browser invia 15-20 intestazioni in un ordine specifico; uno script Python predefinito invia 3-4.
Intestazioni essenziali
# 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)
Regole di coerenza dell'intestazione
- Sec-Ch-Ua con User-Agent: Se si rivendica Chrome 131, il tuo
Sec-Ch-Uadeve fare riferimento alla versione 131. - Include tutte le intestazioni Sec-Fetch: Modern Chrome invia questi su ogni navigazione. Mancarli è un forte segnale bot.
- Impostare Accetta-Language per abbinare il proxy geo: Un proxy USA con
Accept-Language: ja-JPè sospetto. - Mantenere l'ordine di intestazione: Alcuni sistemi anti-bot controllano l'ordine dell'intestazione. Utilizzare librerie che conservano l'ordine di inserimento.
Livello 3: TLS e HTTP/2
La tua libreria client HTTP produce un unico Impronte TLS che i sistemi anti-bot controllino contro l'utente-agente rivendicato. Un utente-agente Chrome con un'impronta di Python TLS è immediatamente contrassegnato.
Mitigazione per lingua
| Lingua | Biblioteca di default | Rischio di rilevamento | Browser-Grade alternativa |
|---|---|---|---|
| Python | richieste/urllib3 | Molto alto | curl cffi con impersonato |
| Node.js | axios/got | Alto | ha-scrazia |
| Vai. | net/http | Molto alto | uTLS + trasporto personalizzato |
# 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"
}
)
Livello 4: Sfogliatore Impronte
Se si utilizza un browser senza testa, sonde JavaScript anti-bot browser impronta digitale — Tela, WebGL, AudioContext, proprietà navigatore. Il principio chiave è la consistenza interna:
- Tutti i segnali di impronte devono essere d'accordo tra di loro
- L'impronta digitale deve corrispondere alle richieste dell'utente
- L'impronta dovrebbe cambiare quando si ruotano i proxy
Configurazione della larghezza
// 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 });
Livello 5: Motivi comportamentali
Anche con una mimica tecnica perfetta, i modelli di comportamento simili a bot innescano il rilevamento. I sistemi anti-bot analizzano la tempistica, i modelli di navigazione e le firme di interazione.
Richiesta tempistica
- Aggiungi ritardi casuali: Gli esseri umani non fanno richieste a intervalli esatti. Aggiungi 1-5 secondi di ritardo casuale tra le richieste.
- Vary ritardi per tipo di pagina: Le pagine dei contenuti meritano più lunghe pause "lettura" che pagine di elenco.
- Evitare i modelli di scoppio: Non fare 50 richieste rapide poi pausa. Distribuire le richieste in modo uniforme con varianza naturale.
# 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)
Modelli di navigazione
- Seguire percorsi naturali: Visita prima la homepage, poi le pagine di categoria, poi le pagine di dettaglio — non saltare direttamente agli URL profondi.
- Impostare correttamente intestazioni di riferimento: Ogni pagina dovrebbe fare riferimento alla pagina precedente come riferimento.
- Redirect della maniglia: Seguire i reindirizzamenti HTTP naturalmente piuttosto che riproporre l'URL originale.
Gestione delle sessioni
- Mantenere i cookie: Accettare e restituire i cookie all'interno di una sessione — scartare tutti i cookie è un segnale bot.
- Lunghezza della sessione di limite: Dopo 50-100 richieste, avviare una nuova sessione con un IP fresco e cookie.
- Limiti di tasso di rispetto: Se si ricevono 429 risposte, indietro esponenzialmente piuttosto che riprovare immediatamente.
Livello 6: Convalida della risposta
La rilevazione non comporta sempre un blocco. I siti possono servire contenuti diversi, iniettare dati fuorvianti, o restituire blocchi morbidi. Convalida sempre le tue risposte:
- Controllare i codici di stato: 200 non significa sempre successo — alcuni siti restituiscono 200 con pagine CAPTCHA o contenuti vuoti.
- Convalida struttura dei contenuti: Assicurare la risposta contiene elementi attesi (prezzo del prodotto, testo dell'articolo, ecc.).
- Monitor per pentole: Link nascosti o campi di forma progettati per catturare crawler automatizzati.
- Traccia i tassi di successo: Se il tasso di successo scende al di sotto del 90%, qualcosa è cambiato e ha bisogno di indagine.
Elenco completo di controllo anti-eliminazione
| Livello | Azione | Priorità |
|---|---|---|
| IP | Utilizzare proxy residenziali con geo-targeting | Critica |
| IP | Ruota IP per richiesta o sessione | Critica |
| Intestazioni | Invio completo, set di intestazioni realistici | Critica |
| Intestazioni | Abbinamento Accetta-Language alla posizione proxy | Alto |
| TLS | Utilizzare la libreria TLS di livello del browser | Critica |
| TLS | Abbina l'impronta TLS al browser rivendicato | Critica |
| Browser | Utilizzare plugin stealth per browser senza testa | Alto |
| Browser | Mantenere profili di impronte digitali coerenti | Alto |
| Comportamento | Aggiungi ritardi casuali tra le richieste | Alto |
| Comportamento | Seguire percorsi di navigazione naturali | Media |
| Comportamento | Mantenere i cookie nelle sessioni | Media |
| Validazione | Controlla il contenuto della risposta, non solo i codici di stato | Alto |
Esempio: Scraper anti-detezione completo
# 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")
Quando aumentare il vostro approccio
Inizia con l'approccio più semplice ed escalate solo quando necessario:
- Livello 1 — client HTTP + intestazioni + proxy: Funziona per la maggior parte dei siti. Uso
curl_cffiogot-scrapingcon Prossidi di ProxyHat. - Livello 2 — Aggiungi TLS di livello del browser: Richiesto quando il sito controlla le impronte JA3/JA4.
- Livello 3 — Browser senza testa + stealth: Necessario per il contenuto in JavaScript e sofisticati sistemi anti-bot.
- Livello 4 — Automazione completa del browser con mimica comportamentale: Riservato per i siti più protetti (Cloudflare Enterprise, PerimeterX, ecc.).
Per i modelli di implementazione in lingue specifiche, fare riferimento alle nostre guide: Python♪ Node.jse Vai..
Linee guida etiche
Le tecniche anti-detection sono strumenti: il loro uso etico dipende dal contesto. Sempre:
- Rispettare robot.txt e termini di servizio
- Scrape dati disponibili solo pubblicamente
- Limitare i tassi di richiesta per evitare l'impatto del server
- Conforme alle normative sulla protezione dei dati (GDPR, CCPA)
- Uso pratiche di raschiamento etico come la vostra base
L'obiettivo dell'anti-detezione non è quello di bypassare la sicurezza legittima. È per garantire che l'accesso automatizzato ai dati pubblici non sia contrassegnato in modo errato come dannoso.






