Perché Proxy Count Matters per Scraping Web
Una delle prime domande che qualsiasi progetto di raschiamento faccia è ingannevolmente semplice: Quanti proxy mi servono? Usa troppo pochi e i tuoi IP vengono vietati in pochi minuti. Usa troppi e sprechi il budget sulla capacità che non tocchi mai. Il numero giusto dipende dai siti di destinazione, dal volume di richiesta, dalla strategia di rotazione e dalla tolleranza per i blocchi.
Questa guida fornisce un quadro di calcolo pratico in modo da poter dimensionare il vostro pool proxy con fiducia, se si sta raschiando dieci pagine al giorno o dieci milioni.
Se sei nuovo per raschiare i proxy, inizia con i nostri Guida completa ai proxy Web Scraping per i concetti fondamentali.
La Formula Core
Nel suo più semplice, il numero di IP concomitanti di cui hai bisogno è:
required_ips = (requests_per_minute) / (safe_rpm_per_ip)Dove? safe rpm per ip è il tasso di richiesta massimo che un singolo IP può sostenere sul tuo sito di destinazione senza attivare blocchi. Questo varia drammaticamente dal bersaglio:
| Tipo di destinazione | RPM sicuro per IP | Note |
|---|---|---|
| Piccoli blog / siti statici | 20-60 | Minimal anti-bot |
| E-commerce (Shopify, WooCommerce) | 5-15 | Limitamento della velocità moderata |
| Piattaforme principali (Amazon, Google) | 1-5 | Rilevamento aggressivo |
| Social media (LinkedIn, Instagram) | 0,5-2 | Esecuzione molto rigorosa |
Calcolo di esempio
Supponiamo che sia necessario raschiare 50.000 pagine di prodotto da un sito di e-commerce ogni giorno, completando il lavoro all'interno di una finestra di 8 ore:
# Target: 50,000 pages in 8 hours
requests_per_minute = 50000 / (8 * 60) # ≈ 104 RPM
safe_rpm_per_ip = 10 # e-commerce average
required_ips = 104 / 10 # ≈ 11 concurrent IPsIn pratica, si dovrebbe aggiungere un 30-50% buffer per ritiri, guasti e raffreddimenti di tasso-limite. Quindi il bisogno realistico è intorno 15-17 IP concurrent.
Fattori che influiscono sui vostri requisiti proxy
1. Sofisticazione del sito di destinazione
Siti con avanzato sistemi anti-bot richiedono più IP perché ogni IP può fare meno richieste prima di essere contrassegnato. Google, Amazon e le principali piattaforme sociali investono pesantemente in impronta digitale e analisi comportamentali. Bilancio per 3-5x più IPs che la formula di base suggerisce quando si rivolge a questi siti.
2. Richiesta volume e frequenza
La raschiatura continua (24/7 monitoraggio) ha bisogno di più IP che lavori batch. Se si esegue un lotto giornaliero, è possibile ruotare attraverso la piscina aggressivamente durante la finestra, quindi lasciare che gli IP si raffreddano. Per il monitoraggio in tempo reale, ogni IP rimane attivo più a lungo, aumentando il vostro requisito totale.
3. Distribuzione geografica
Se hai bisogno di dati da più regioni (prezzi localizzati, risultati di ricerca geospecifici), hai bisogno di IP in ogni geografia di destinazione. Un progetto di raschiamento dei prezzi in 10 paesi potrebbe avere bisogno di 15 IP per paese, il che significa 150 totali. Controllare la disponibilità ProxyHat posizioni per pianificare la vostra geodistribuzione.
4. Sessione vs Requisiti di rotazione
Alcune attività (flussi di registrazione, analisi di controllo multi-pagina) richiedono sessioni appiccicose dove lo stesso IP persiste per minuti. Questo lega più a lungo gli IP, riducendo l'utilizzo efficace della piscina. La raccolta dati pura senza stato di sessione può ruotare su ogni richiesta, utilizzando ogni IP in modo più efficiente.
5. Residenziale vs Datacenter
Gli IP residenziali hanno punteggi di fiducia più elevati e possono fare più richieste prima dei divieti, in modo da poter avere bisogno di meno di loro. Ma costano di più per GB. Gli IP del datacenter sono più economici ma vengono contrassegnati più velocemente, quindi è necessario una piscina più grande. Per un confronto più profondo, vedere Residenziale vs Datacenter vs Mobile Proxies.
Tavoli di dimensionamento per caso d'uso
| Utilizzare il caso | Richieste giornaliere | IP consigliati | Tipo di proxy |
|---|---|---|---|
| Piccola revisione SEO (1 sito) | 1000-5.000 | 5-10 | Residenziale |
| Monitoraggio dei prezzi del prodotto | 10.000. | 15-30 | Residenziale |
| monitoraggio SERP (100 parole chiave) | 5.000.000 | 10-25 | Residenziale |
| E-commerce catalogo scraping | 50.000 | 30-80 | Residenziale |
| aggregazione di dati su larga scala | 500.000+ | 100-500+ | Rotazione residenziale |
Calcolo della larghezza di banda totale
Il conteggio del proxy è una dimensione; la larghezza di banda è l'altra. Valutare il trasferimento totale dei dati:
# Average page sizes
static_page = 50 KB # HTML only
dynamic_page = 200 KB # HTML + JSON/API responses
full_render = 2-5 MB # with all assets (headless browser)
# Example: 50,000 pages/day × 200 KB average
daily_bandwidth = 50000 * 200 / 1024 / 1024 # ≈ 9.5 GB/dayQuesto ti aiuta a scegliere il giusto Piano ProxyHat in base alle esigenze IP e larghezza di banda.
Attuazione: dimensionamento dinamico della piscina
Piuttosto che indovinare staticamente, implementare il dimensionamento della piscina dinamica che si adatta alle condizioni del mondo reale. Ecco un esempio utilizzando il gateway ProxyHat con concurrency adattativa:
Esempio di Python
import asyncio
import aiohttp
from dataclasses import dataclass, field
from time import time
@dataclass
class PoolSizer:
"""Dynamically adjusts concurrent proxy connections based on success rate."""
min_concurrent: int = 5
max_concurrent: int = 100
target_success_rate: float = 0.95
current_concurrent: int = 10
results: list = field(default_factory=list)
def record(self, success: bool):
self.results.append((time(), success))
# Keep only last 100 results
self.results = self.results[-100:]
@property
def success_rate(self) -> float:
if not self.results:
return 1.0
return sum(1 for _, s in self.results if s) / len(self.results)
def adjust(self):
rate = self.success_rate
if rate >= self.target_success_rate and self.current_concurrent < self.max_concurrent:
# Success rate is good — try more concurrency
self.current_concurrent = min(self.current_concurrent + 2, self.max_concurrent)
elif rate < self.target_success_rate * 0.9:
# Success rate dropping — reduce concurrency
self.current_concurrent = max(self.current_concurrent - 5, self.min_concurrent)
async def scrape_with_adaptive_pool(urls: list[str]):
sizer = PoolSizer()
proxy = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
semaphore = asyncio.Semaphore(sizer.current_concurrent)
async with aiohttp.ClientSession() as session:
async def fetch(url):
async with semaphore:
try:
async with session.get(url, proxy=proxy, timeout=aiohttp.ClientTimeout(total=30)) as resp:
success = resp.status == 200
sizer.record(success)
return await resp.text() if success else None
except Exception:
sizer.record(False)
return None
for batch_start in range(0, len(urls), sizer.current_concurrent):
batch = urls[batch_start:batch_start + sizer.current_concurrent]
await asyncio.gather(*[fetch(url) for url in batch])
sizer.adjust()
# Update semaphore for next batch
semaphore = asyncio.Semaphore(sizer.current_concurrent)
print(f"Concurrent IPs: {sizer.current_concurrent}, Success rate: {sizer.success_rate:.1%}")Per uso di produzione, il ProxyHat Python SDK maniglie di connessione pooling e rotazione automaticamente.
Esempio Node.js
const HttpsProxyAgent = require('https-proxy-agent');
const fetch = require('node-fetch');
class AdaptivePoolSizer {
constructor(min = 5, max = 100) {
this.min = min;
this.max = max;
this.current = 10;
this.results = [];
this.targetRate = 0.95;
}
record(success) {
this.results.push({ time: Date.now(), success });
if (this.results.length > 100) this.results = this.results.slice(-100);
}
get successRate() {
if (!this.results.length) return 1;
return this.results.filter(r => r.success).length / this.results.length;
}
adjust() {
if (this.successRate >= this.targetRate && this.current < this.max) {
this.current = Math.min(this.current + 2, this.max);
} else if (this.successRate < this.targetRate * 0.9) {
this.current = Math.max(this.current - 5, this.min);
}
}
}
async function scrapeWithAdaptivePool(urls) {
const sizer = new AdaptivePoolSizer();
const agent = new HttpsProxyAgent('http://USERNAME:PASSWORD@gate.proxyhat.com:8080');
for (let i = 0; i < urls.length; i += sizer.current) {
const batch = urls.slice(i, i + sizer.current);
const results = await Promise.allSettled(
batch.map(url =>
fetch(url, { agent, timeout: 30000 })
.then(res => { sizer.record(res.ok); return res.text(); })
.catch(() => { sizer.record(false); return null; })
)
);
sizer.adjust();
console.log(`Concurrent: ${sizer.current}, Success: ${(sizer.successRate * 100).toFixed(1)}%`);
}
}Errori comuni quando si dimensionano le piscine del proxy
- Utilizzando lo stesso conteggio per tutti gli obiettivi. Una piscina che funziona per blog statici fallirà su Amazon. Sempre punto di riferimento per obiettivo.
- Ignorando la riprovazione in testa. Le richieste fallite consumano larghezza di banda e tempo. Fattore in un tasso di riprovazione del 20-40% per obiettivi aggressivi.
- Non contabilizzare i requisiti di sessione. Se avete bisogno di sessioni appiccicose per i flussi di login, ogni sessione collega un IP. Calcolate in base a sessioni contemporaneamente, non solo il tasso di richiesta.
- Dimenticare le esigenze geografiche. Dieci IP negli Stati Uniti non ti aiuteranno a raschiare i risultati localizzati in Giappone. Piano per geografia.
- Supervisione "solo nel caso". Con prossi residenziali rotanti come ProxyHat, si accede automaticamente a una grande piscina. Paghi per larghezza di banda, non per il numero di IP in piscina. Concentrati su scegliere il giusto tipo di proxy piuttosto che accumulare IP.
Vantaggio ProxyHat: Gestione piscina semplificata
Con il gateway proxy residenziale di ProxyHat, non è necessario gestire manualmente un elenco di IP. Ogni richiesta attraverso gate.proxyhat.com riceve automaticamente un IP fresco da un pool di milioni. Questo significa:
- Nessuna gestione manuale dell'elenco IP
- rotazione automatica su ogni richiesta (o sessioni appiccicose quando necessario)
- Accesso agli IP in 190+ paesi
- Paga per larghezza di banda utilizzata, non per-IP tasse
Il vostro "conto proxy" diventa effettivamente il vostro livello di convalutazione — quante connessioni simultanee si eseguono attraverso il gateway. Iniziare con le formule sopra, quindi lasciare che il codice di dimensionamento adattativo fine-tune esso in produzione.
Per una passeggiata completa attraverso la demolizione di architettura con i proxy, vedere il nostro Guida completa ai proxy Web Scraping. Per conoscere le strategie di rotazione che completano il dimensionamento della piscina, leggere Come Graffiare i Siti web senza Bloccarsi.
Domande frequenti
Quanti proxy mi servono per raschiare su piccola scala?
Per i piccoli progetti con meno di 5.000 richieste al giorno che mirano a siti moderatamente protetti, 5-10 proxy residenziali concurrent sono tipicamente sufficienti. Con un gateway rotante come ProxyHat, è sufficiente impostare il livello di convalutazione a 5-10 e il sistema gestisce l'assegnazione IP.
Ho bisogno di più proxy per siti JavaScript-heavy?
Si'. La raschiatura del browser senza testa è più lenta per richiesta (2-10 secondi vs 0.5-1 secondo per sola HTML), il che significa che ogni slot concomitante elabora meno richieste. Potrebbe essere necessario 2-3x la convalutazione per mantenere lo stesso throughput. Vedere la nostra guida su evitare blocchi per suggerimenti di ottimizzazione.
Dovrei usare proxy residenziali o datacenter?
Per la maggior parte delle attività di raschiamento, i proxy residenziali offrono tassi di successo più elevati e richiedono meno connessioni concorrenziali. I proxy Datacenter sono più economici per GB ma vengono bloccati più velocemente, richiedendo una piscina più grande. Leggi il nostro confronto tipo proxy per una guida dettagliata.
Come funziona la piscina girevole di ProxyHat?
Ogni richiesta tramite il gateway di ProxyHat (gate.proxyhat.com:8080) viene automaticamente assegnato un IP residenziale diverso. Non si gestisce i singoli IP — si controlla la convalutazione e il sistema gestisce la rotazione. Questo è più efficiente che mantenere un elenco IP statico.






