Come Graffiare i Siti web senza Bloccarsi

Impara le tecniche provate per raschiare i siti web senza essere bloccati. Copre la rotazione dei proxy, la gestione dell'intestazione, il limite dei tassi e gli esempi di codice in Python, Node.js e Go.

Come Graffiare i Siti web senza Bloccarsi

Ogni progetto di raschiamento web serio alla fine colpisce la stessa parete: le vostre richieste iniziano a restituire CAPTCHA, 403 errori, o pagine vuote. I siti web sono diventati notevolmente buoni nel rilevare il traffico automatizzato, e la corsa di armi tra raschiatori e sistemi anti-bot è più intensa che mai. Che tu stia raccogliendo dati sui prezzi, monitorando i contenuti dei concorrenti o costruendo set di dati per la formazione AI, imparando a raschiare siti web senza ottenere bloccato non è più facoltativo — è fondamentale per qualsiasi data pipeline affidabile.

Questa guida copre le ragioni tecniche dietro i blocchi, i segnali di rilevamento moderni sistemi anti-bot cercano, e le strategie provate per mantenere i raschiatori in esecuzione senza intoppi. Includiamo esempi di codice di lavoro utilizzando Prossi residenziali mostrare come questi concetti si traducono in implementazioni pronte alla produzione.

Perché i siti web bloccano i grattacieli

Prima di risolvere il problema, aiuta a capire ciò che si è contro. I siti web dispiegano misure anti-bot per diversi motivi legittimi:

  • Protezione delle infrastrutture — Raschiamento aggressivo può sopraffare server, degradare le prestazioni per utenti reali, e gonfiare i costi di hosting.
  • Protezione dei contenuti — Publisher, siti di e-commerce e fornitori di dati vogliono impedire ai concorrenti di copiare i propri dati in scala.
  • Sicurezza — I modelli di traffico automatizzati si sovrappongono con l'imbottitura delle credenziali, attacchi DDoS e scansione della vulnerabilità.
  • Conformità normativa — I siti che gestiscono i dati personali possono limitare l'accesso automatizzato al rispetto delle normative sulla privacy.

I siti moderni si affidano a servizi anti-bot specializzati come Cloudflare Bot Management, Akamai Bot Manager, PerimeterX e DataDome. Questi servizi analizzano il traffico in tempo reale utilizzando una combinazione di segnali, e condividono l'intelligenza attraverso le loro reti — il che significa un modello contrassegnato su un sito può innescare blocchi su migliaia di altri.

Segnali di rilevamento che vengono bloccati

I sistemi anti-bot raramente si basano su un singolo indicatore. Costruiscono un punteggio di rischio da più segnali e bloccano richieste che superano una soglia. Ecco i vettori di rilevamento chiave:

Reputazione dell'indirizzo IP

Questo è il segnale più fondamentale. Gli intervalli IP del Datacenter sono ben documentati e portano punteggi di rischio intrinsecamente più elevati. Se le vostre richieste provengono da AWS, Google Cloud o da qualsiasi provider di hosting noto, molti sistemi anti-bot li sfideranno o li bloccono immediatamente. Anche con IP residenziali, l'invio di troppe richieste da un unico indirizzo lo porterà contrassegnato. I database della reputazione IP vengono aggiornati in tempo reale e un IP bruciato può rimanere nella lista nera per settimane.

Tasso di richiesta e analisi dei modelli

Gli esseri umani non richiedono 50 pagine al secondo con intervalli perfettamente uniformi. I sistemi anti-bot seguono la frequenza di richiesta, i modelli di temporizzazione e il flusso di navigazione. Scraping che segue un percorso perfettamente sequenziale attraverso risultati impaginati — con identici ritardi tra richieste — sembra meccanico anche se il tasso è conservatore.

Fingerprinting HTTP

Ogni client HTTP ha un'impronta distintiva basata sulla combinazione di intestazioni che invia: l'ordine delle intestazioni, le caratteristiche del handshake TLS (impronta digitale JA3/JA4), i frame delle impostazioni HTTP/2 e i valori dell'intestazione. A Python requests libreria ha un'impronta digitale completamente diversa da Chrome. I sistemi anti-bot mantengono database di note impronte del browser e contrassegnano tutto ciò che non corrisponde.

Sfogliatore Impronte e JavaScript Sfide

I sistemi anti-bot avanzati servono sfide JavaScript che ispezionano l'ambiente del browser: rendering di tela, funzionalità WebGL, font installati, risoluzione dello schermo, timezone, preferenze di lingua e centinaia di altri segnali. I browser senza testa come Puppeteer e Playwright possono essere rilevati attraverso sottili differenze — i plug-in del browser mancanti, i descrittori di proprietà errati sugli oggetti del navigatore, o l'assenza di comportamenti di rendering previsti.

Analisi comportamentale

Alcuni sistemi rintracciano i movimenti del mouse, i modelli di scorrimento e fanno clic sul comportamento. Una sessione che passa direttamente alle pagine data-heavy senza prima visitare la homepage, o che non sposta mai il mouse, segnala l'automazione.

Segnale di rilevamentoLivello di rischioDifficoltà di migrazioneDifesa primaria
Gamma di dati IPCriticaFacileUtilizzare i proxy residenziali
Tasso di richiesta elevatoAltoFacileTasso di limitazione + ritardi casuali
Intestazioni mancanti/rongAltoMediaProfili di intestazione realistici
Mancanza di impronte digitali TLSAltoDifficilelibrerie di spoofing delle impronte digitali TLS
JavaScript sfida il fallimentoCriticaDifficileBrowser reale (Playwright/Puppeteer)
Anomalie comportamentaliMediaDifficileSimulazione di interazione umana
Anomalie di cookie/sessioneMediaMediaGestione corretta della sessione

Strategie per raschiare senza bloccarsi

1. Utilizzare i proxy residenziali per la rotazione IP

La sola difesa più efficace contro il blocco basato su IP sta routing le vostre richieste attraverso Prossi residenziali. Gli IP residenziali appartengono a ISP reali e portano la stessa reputazione di collegamenti internet domestici regolari. I sistemi anti-bot non possono bloccare le gamme residenziali senza pregiudicare gli utenti legittimi.

Efficace rotazione proxy significa assegnare un IP diverso a ogni richiesta o piccolo lotto di richieste. Per la raschiatura dipendente dalla sessione (dove è necessario mantenere lo stato di login o navigare flussi multi-pagina), utilizzare sessioni appiccicose che mantengono lo stesso IP per una durata definita prima di ruotare.

ProxyHat fornisce la rotazione automatica con il controllo di sessione configurabile. È possibile indirizzare IP da paesi specifici, stati o città accedere a contenuti geo-restricted mantenendo i punteggi di fiducia di livello residenziale.

2. Craft Realistic HTTP Intestazioni

Le intestazioni predefinite delle librerie di demolizione sono un danno morto. Una richiesta da Python's requests biblioteca invia User-Agent: python-requests/2.31.0 — che lo contrassegna immediatamente come automatizzato. Costruisci i profili dell'intestazione che corrispondono esattamente ai browser reali:

  • Impostare una corrente, completa User-Agent stringa corrispondente a una versione del browser reale
  • Includere AcceptAccept-LanguageAccept-Encodinge Sec-CH-UA intestazioni
  • Abbina l'ordine intestazione al browser che stai impersonando
  • Ruotare tra più profili del browser per evitare una singola impronta digitale
  • Includere un plausibile Referer header (ad esempio, una pagina dei risultati del motore di ricerca)

3. Implement Smart Rate Limiting

I ritardi uniformi sono quasi sospetti come nessun ritardo. Implementare ritardi randomizzati che seguono una distribuzione realistica:

  • Ritardo base di 2-5 secondi tra richieste
  • Aggiungere jitter casuale di più o meno 30-50%
  • Inserisci pause più lunghe (15-30 secondi) ogni 20-50 richieste
  • Ridurre la convalutazione per dominio — 2-3 richieste parallele massimo
  • Attuazione backoff esponenziale quando si ricevono segnali di limite di velocità (429 codici di stato)

4. Gestione corretta delle sessioni e dei cookie

Molti siti assegnano i cookie di tracciamento sulla prima visita e li aspettano su richieste successive. Un raschietto che non invia mai i cookie, o che invia cookie freschi su ogni richiesta, attiva il rilevamento di anomalia. Mantenere un cookie jar per sessione e portare i cookie attraverso le richieste all'interno di una sessione di navigazione logica.

5. Maniglia JavaScript-render Contenuto

Per i siti che richiedono l'esecuzione di JavaScript, utilizzare un vero motore del browser tramite Playwright o Puppeteer. Ma l'esecuzione di browser senza testa senza precauzioni è facilmente rilevata. Le fasi di indurimento chiave includono:

  • Uso playwright-extra o puppeteer-extra con plugin stealth
  • Impostare una dimensione realistica del viewport (non il default 800x600)
  • Attiva WebGL e inietta stringhe di rendering GPU coerenti
  • Impostare il fuso orario e la posizione geografica del proxy
  • Aggiungi movimenti casuali del mouse e le azioni di scorrimento prima di estrarre i dati

6. Rispettare robots.txt e implementare Backoff

Mentre robots.txt non è giuridicamente vincolante in tutte le giurisdizioni, rispettandolo dimostra buona fede. Più praticamente, i siti che ti vedono ignorare robots.txt sono più probabilità di implementare il blocco aggressivo. Attuare sempre il backoff automatico quando si riceve 429 (Too Many Requests) o 503 (Service Non available) risposte — questi sono segnali espliciti per rallentare.

Esempi di codice: Scraping con proxy residenziali ProxyHat

I seguenti esempi dimostrano come configurare la rotazione del proxy residenziale con intestazioni realistiche. Ogni esempio utilizza il ProxyHat SDK per la rispettiva lingua. Per intero Documentazione API, vedi i documenti ProxyHat.

Esempio di Python

Installare il 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)

Esempio Node.js

Installare il 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();

Vai Esempio

Installare il 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)
    }
}

Sessioni appiccicose per flussi multi-pagine

Alcune attività di raschiamento richiedono il mantenimento dello stesso indirizzo IP attraverso più richieste — ad esempio, la navigazione di un elenco di prodotti impaginato, il mantenimento di una sessione di accesso, o il completamento di un modulo multi-step. ProxyHat supporta sessioni appiccicose che tengono lo stesso IP residenziale per una durata configurabile.

# 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

Errori comuni che blocca il trigger

Anche gli sviluppatori esperti fanno questi errori. Ognuno può bruciare attraverso la larghezza di banda del proxy e ottenere IP contrassegnati inutilmente:

  • Utilizzo di intestazioni di libreria predefinite — il python-requests La stringa User-Agent è su ogni blocklist. Impostare sempre intestazioni personalizzate.
  • Ignorando le impronte TLS - Le tue intestazioni potrebbero dire "Chrome" ma il tuo handshake TLS dice "Python". Utilizzare librerie come curl_cffi o tls-client che impersonano il vero browser TLS impronte digitali.
  • Scraping troppo veloce sul lancio iniziale - Inizia lentamente. Aggiornare i tassi di richiesta gradualmente durante le ore, non minuti.
  • Non maneggiare errori con grazia — Recuperare richieste bloccate immediatamente con la stessa larghezza di banda di rifiuti di configurazione e conferma che sei un robot. Attivare il backoff e attivare le sessioni proxy sugli errori.
  • Riutilizzare gli IP bruciati — Se una richiesta restituisce una pagina CAPTCHA o blocco, che IP è compromesso per tale obiettivo. Ruota immediatamente a una nuova sessione.
  • Ignorando la consistenza geografica — Inviare richieste da un IP americano con Accept-Language: ja e un offset di fuso orario di +9 sembra sospetto. Abbina le tue intestazioni e le impostazioni del browser al tuo proxy posizione.
  • Non monitorare i tassi di successo — Senza tracciare il tasso di blocco, non si può dire se la vostra strategia sta funzionando. Accedi ad ogni stato di risposta e all'avviso sulle gocce di tasso di successo.

Tecniche avanzate per obiettivi ad alta valore

Randomizzazione delle impronte digitali

Per siti fortemente protetti, ruotare non solo IP ma interi profili di impronte del browser. Ogni sessione dovrebbe avere una combinazione coerente di User-Agent, risoluzione dello schermo, timezone, lingua e piattaforma — e questi dovrebbero abbinare combinazioni realistiche. Un Windows User-Agent con una stringa di piattaforma Linux è una bandiera rossa evidente.

Richiedi la simulazione della catena

Gli utenti reali non saltano direttamente alle pagine del prodotto. Arrivano dai motori di ricerca, sfogliano pagine di categoria e seguono link interni. Costruire il raschietto per simulare percorsi di navigazione realistici: caricare la homepage, seguire i link alle pagine di categoria, quindi accedere ai dati di destinazione. Questo genera un modello di sessione credibile.

SERP Scraping Considerazioni

Il raschiamento del motore di ricerca ha sfide uniche perché Google, Bing e altri hanno un rilevamento bot particolarmente aggressivo. I proxy residenziali sono essenziali per affidabilità monitoraggio SERP, e si dovrebbe distribuire richieste in più posizioni geografiche per evitare di innescare limiti di tasso da qualsiasi singola regione.

Scegliere il tipo di proxy destro

Non tutti i lavori di raschiamento richiedono dei proxy residenziali. La scelta giusta dipende dalle difese del vostro obiettivo e dal vostro budget. Vedi il nostro confronto dettagliato dei tipi di proxy per un'immersione profonda. Ecco una matrice di decisione rapida:

Utilizzare il casoTipo di proxy consigliatoMotivazione
Raschiatura generale webRotazione residenzialeIl miglior equilibrio di fiducia e costi
E-commerce monitoraggio dei prezziRotazione residenzialeAlta protezione anti-bot sulla maggior parte dei rivenditori
monitoraggio SERPOperazione residenzialeI motori di ricerca bloccano i datacenter IP aggressivamente
Social media scrapingProx mobiliMaggiore fiducia per piattaforme che si aspettano il traffico mobile
Accesso alle API pubblicheDatacenterbasso rischio anti-bot, opzione più economica
Siti Sneaker/ticketAppiattimento residenzialePersistenza di sessione con fiducia residenziale

Per la maggior parte dei progetti di raschiamento, i proxy residenziali rotanti offrono la migliore combinazione di affidabilità e convenienza. Prezzo di ProxyHat si basa sul consumo di larghezza di banda, in modo da pagare solo per il trasferimento di dati di successo.

Asporto chiave

  • I proxy residenziali sono la base — Gli IP del Datacenter vengono bloccati immediatamente sulla maggior parte dei siti protetti. Gli IP residenziali portano fiducia naturale.
  • Le intestazioni valgono quanto gli IP — Un IP residenziale con intestazioni Python predefinite viene bloccato. Costruire profili di intestazione completi e realistici.
  • Randominare tutto — Delays, combinazioni di intestazioni, percorsi di navigazione. Modelli prevedibili sono modelli rilevabili.
  • Monitoraggio e adattamento - Traccia il tuo tasso di successo. Quando i blocchi aumentano, indagano e regolano prima di bruciare attraverso il vostro pool proxy.
  • Abbina le tue impronte — Ogni segnale dovrebbe raccontare una storia coerente: Utente-Agent, impronte TLS, fuso orario, lingua e posizione geografica devono allinearsi.
  • Inizia lento, scala gradualmente — Iniziare con limiti di tasso conservatore e aumentare solo dopo aver confermato il vostro setup funziona in modo affidabile.
  • Utilizzare sessioni appiccicose per flussi di stato — Sequenze di accesso e navigazione multi-pagina hanno bisogno di consistenza IP. Utilizzare sessioni appiccicose con TTL appropriati.

Domande frequenti

Come faccio a sapere se il mio raschietto e' bloccato?

I segni comuni includono la ricezione dei codici di stato HTTP 403 o 429, essendo reindirizzati alle pagine CAPTCHA, ottenendo corpi di risposta vuoti in cui ci si aspetta il contenuto HTML, o la ricezione di contenuti diversi da quello che si vede in un browser normale. Monitorare i codici di stato della risposta e la lunghezza del contenuto — un improvviso calo della dimensione media della risposta indica spesso blocchi morbidi in cui il sito restituisce una pagina di sfida invece del contenuto reale.

Sono abbastanza proxy residenziali per evitare tutti i blocchi?

I proxy residenziali eliminano il blocco basato su IP, che è il metodo di rilevamento più comune, ma non sono una soluzione completa da soli. Hai ancora bisogno di intestazioni realistiche, il corretto limite di tasso e la gestione della sessione. Pensate ai proxy residenziali come la fondazione — risolvono il problema più difficile ( reputazione IP), ma gli altri strati del vostro stack di raschiamento devono anche essere solidi. Per i siti più protetti, combinare i proxy residenziali con l'impersonazione delle impronte del browser utilizzando strumenti come curl_cffi o Playwright configurato da stealth.

Quante richieste al secondo posso inviare senza essere bloccato?

Non c'è risposta universale perché dipende dalle difese del sito web di destinazione. Come punto di partenza conservatore, limitarsi a 1 richiesta ogni 2-5 secondi per dominio con IP rotanti. Per siti meno protetti, si può gradualmente aumentare a 5-10 richieste concorrenti. Per siti fortemente protetti come Google o Amazon, rimanere sotto 1 richiesta per 3 secondi anche con proxy residenziali. Sempre dilagare gradualmente e monitorare il tasso di successo — se scende sotto il 95%, si sta andando troppo veloce.

Qual è la differenza tra sessioni di proxy rotanti e appiccicose?

Le sessioni di rotazione assegnano un nuovo indirizzo IP a ogni richiesta, che è ideale per la demolizione di pagine indipendenti in cui nessuno stato deve persistere tra le richieste. Le sessioni appiccicose mantengono lo stesso IP per una durata configurata (tipicamente 1-30 minuti), che è necessario per i flussi di login, la navigazione impaginata, o qualsiasi processo multi-step in cui il server traccia il tuo IP. Utilizzare sessioni di rotazione per impostazione predefinita e passare a sticky solo quando il caso di utilizzo richiede specificamente continuità di sessione.

Il web scraping è legale?

La legalità del web scraping varia per giurisdizione, il tipo di dati raccolti, e come viene utilizzato. Negli Stati Uniti, il 2022 hiQ Labs v. Linked Nella sentenza stabilita che la raccolta di dati pubblicamente disponibili non viola il Computer Fraud e Abuse Act. Nell'UE, il GDPR si applica ai dati personali indipendentemente da come vengono raccolti. Di regola generale: raschiare pubblicamente disponibili, i dati non personali per scopi commerciali legittimi sono ampiamente accettati. Sempre rivedere i Termini di servizio di un sito web, rispettare robots.txt come una cortesia, e consultare il consulente legale per il vostro caso di utilizzo specifico.

Pronto per iniziare?

Accedi a oltre 50M di IP residenziali in oltre 148 paesi con filtraggio AI.

Vedi i prezziProxy residenziali
← Torna al Blog