Web scraping con richieste Python e proxy
Un flusso di lavoro di scraping pratico basato su richieste e BeautifulSoup, instradato attraverso un proxy autenticato in modo che il tuo IP di origine rimanga nascosto e il tuo crawler sopravviva ai limiti di velocità. Codice eseguibile completo incluso.
Un scraper è una sessione, non un ciclo di richieste.
La differenza tra uno scraper che funziona per dieci minuti e uno che gira per ore non è quasi mai il parsing — è come fai le richieste. Un for url in urls: requests.get(url) apre una nuova connessione TCP ogni volta, non invia intestazioni realistiche, non mantiene cookie e colpisce il target da un IP fino a ottenere un 429 o un blocco.
La soluzione è un requests.Session più un proxy. Una sessione gestisce le connessioni e mantiene i cookie, quindi un'improvvisa richiesta di pagine è più veloce e appare come un unico client coerente. Un proxy autenticato sostituisce il tuo vero indirizzo con un'uscita di datacenter, quindi il sito non vede mai il tuo IP di origine e un singolo indirizzo bloccato non interrompe l'intero lavoro. I proxy s4m parlano SOCKS5 sulla porta 1080 e HTTP sulla porta 3128, entrambi autenticati con USER:PASS — usa socks5h:// in modo che il DNS venga risolto da remoto e i nomi host non vengano mai rivelati. Per esperimenti temporanei, la lista di proxy pubblici gratuiti è un pool separato, usalo a tuo rischio e pericolo.
Uno scraper di richieste resiliente
Sessione, intestazioni realistiche, ripetizioni con backoff, rotazione del proxy e parsing di BeautifulSoup in un file. Sostituisci USER:PASS con le tue credenziali.
import random
import time
import requests
from bs4 import BeautifulSoup
from requests.exceptions import RequestException
USER, PASS, HOST = "USER", "PASS", "proxy.s4m.online"
POOL = [
f"socks5h://{USER}:{PASS}@{HOST}:1080", # needs requests[socks]
f"http://{USER}:{PASS}@{HOST}:3128",
]
HEADERS = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
def make_session(proxy):
s = requests.Session()
s.headers.update(HEADERS)
s.proxies = {"http": proxy, "https": proxy}
return s
def fetch(url, retries=4):
for attempt in range(1, retries + 1):
proxy = random.choice(POOL)
try:
s = make_session(proxy)
r = s.get(url, timeout=(5, 20))
if r.status_code == 429:
raise RequestException("rate limited")
r.raise_for_status()
return r
except RequestException as e:
wait = 2 ** attempt + random.random() # exponential backoff
print(f"[{attempt}/{retries}] {proxy} -> {e}; sleeping {wait:.1f}s")
time.sleep(wait)
raise SystemExit(f"giving up on {url}")
html = fetch("https://quotes.toscrape.com/").text
soup = BeautifulSoup(html, "html.parser")
for q in soup.select(".quote"):
text = q.select_one(".text").get_text(strip=True)
who = q.select_one(".author").get_text(strip=True)
print(f"{who}: {text}")Cosa mantiene in vita un crawler
Quattro abitudini che contano più del parser che scegli.
Invia un vero User-Agent
L'UA predefinito di python-requests è un segnale immediato. Imposta un User-Agent di un normale browser e un'intestazione Accept-Language in modo che le richieste si mescolino con il traffico ordinario.
Fermati, non riprovare ciecamente
Su un 429 o un timeout, dormi con backoff esponenziale e jitter prima di riprovare. Cicli di ripetizione stretti approfondiscono solo il blocco e bruciano il traffico proxy.
Ruota l'uscita, non solo il ripristino
Scegli un proxy fresco da un pool ad ogni tentativo in modo che un IP segnalato non fermi il lavoro. I proxy di datacenter a consumo rendono questo economico da scalare.
Rispetta il bersaglio
Leggi robots.txt, limita la concorrenza e raccogli solo ciò che ti è permesso. Un crawler educato è anche più difficile da bloccare.
Da uno script a un vero pipeline
Una volta che il ciclo di recupero è solido, il resto è orchestrazione. Mantieni un piccolo pool di URL proxy e ruota per richiesta; quando un obiettivo diventa aggressivo, aumenta il pool piuttosto che il conteggio dei tentativi. Persisti i risultati man mano che procedi in modo che un fallimento a metà esecuzione non ti costi l'intero crawl, e aggiungi un ritardo cortese tra le pagine in modo da rimanere sotto il limite di velocità invece di combatterlo.
Quando superi gli script ad-hoc, lo stesso endpoint proxy si integra direttamente in Scrapy o in un client asincrono — vedi proxy rotanti in Python per un pool aiohttp. Tutto è costruito sugli stessi mattoni s4m: proxy SOCKS5 e HTTP autenticati da datacenter, a pagamento a consumo, con l'API e gli strumenti per controllare gli IP e le porte di uscita. Se hai solo bisogno di verificare rapidamente un paese o un protocollo, inizia dalla lista gratuita.
Domande, risposte
Ho bisogno di PySocks per gli esempi SOCKS5?
Sì. Il supporto SOCKS nelle richieste proviene da PySocks — installalo con pip install "requests[socks]". L'endpoint HTTP sulla porta 3128 funziona con un'installazione standard di requests e senza dipendenze extra.
Come posso evitare di essere bloccato mentre faccio scraping?
Invia un User-Agent realistico, limita il tuo tasso di richieste, fai un backoff sulle risposte 429 e ruota gli IP di uscita attraverso un pool di proxy. I blocchi sono solitamente legati al comportamento e alla reputazione dell'IP, non al parser che usi.
I proxy s4m sono residenziali?
No. s4m vende proxy SOCKS5 e HTTP autenticati di datacenter, a pagamento a consumo. La lista di proxy pubblici gratuita separata è di terze parti e utilizzata a tuo rischio, utile solo per test rapidi.
Perché usare socks5h invece di socks5?
socks5h chiede al proxy di risolvere DNS, quindi i nomi host che estrai non fuoriescono mai dal tuo computer. Il semplice socks5 risolve prima localmente, il che può rivelare i tuoi obiettivi.
Proxy costruiti per scraping
Punta le richieste a proxy.s4m.online, ruota attraverso uscite SOCKS5 e HTTP del datacenter autenticate, e paga solo per il traffico che utilizzi. Aggiungi un IP dedicato ogni volta che un obiettivo ne prevede uno.
Le persone hanno trovato questa pagina cercando
- web scraping con richieste Python e proxy
- proxy per scraping tutorial
- port forwarding tramite VPN e proxy
- proxy per scraping
- come configurare openvpn
- scarica configurazione del proxy
- vpn kill switch
- proxy http
- come lista di proxy gratuiti funziona
- WireGuard vs OpenVPN
- indirizzo ip
- pagare per una VPN o un proxy con crypto
- acquista proxy http
Frasi di ricerca reali a cui questa pagina risponde — i collegamenti aprono la pagina che le tratta in dettaglio.