Vai al contenuto principale
Strumenti Python2026-07-29 · 10 min di lettura

Python Web Scraping nel 2026: httpx + BeautifulSoup + Playwright - Quando usare quale

La maggior parte dei tutorial "Python web scraping" del 2018 consiglia ancora "requests + BeautifulSoup". La parte "richieste" va bene, ma ora ci sono valori predefiniti migliori e metà del web moderno esegue il rendering dei contenuti in JavaScript, quindi lo stack classico restituisce silenziosamente pagine vuote.

Questa guida copre l'albero decisionale del 2026: quando "httpx + BeautifulSoup" ha ragione (ancora oltre il 90% dei siti), quando rivolgersi a "Playwright", come evitare di essere bloccato e le due regole che mantengono il tuo scraper legale ed etico.

L'albero decisionale in un'immagine

▶ PYTHONeditable · runs in your browser

Questo è tutto. Il novanta per cento delle attività di scraping sono HTML statici: lo stack classico (rinominato) è lo strumento giusto. Il resto necessita dell'esecuzione JS e Playwright è la risposta moderna.

Passaggio 1: httpx + BeautifulSoup (il caso del 90%)

"httpx" è il sostituto drop-in di "requests". Stessa API, più supporto HTTP/2 e asincrono nativo. BeautifulSoup è rimasto invariato rispetto al 2015: la scelta del parser è importante (lxml è 5 volte più veloce dell'impostazione predefinita).

▶ PYTHONeditable · runs in your browser

Scelte chiave:

  • `headers={"User-Agent": ...}` — imposta sempre un vero UA (un indirizzo di contatto è gentile). L'UA httpx predefinito è spesso bloccato.
  • `timeout=10` — non effettuare mai una richiesta illimitata; connessioni bloccate perdono descrittori di file.
  • `raise_for_status()` — rilancia su 4xx/5xx in modo che i fallimenti siano rumorosi, non silenziosi.
  • `"lxml"` parser — 5 volte più veloce del html.parser predefinito e più tollerante con HTML malformato.
  • `soup.select("css-selector")` — considera lo scraping come "fai finta di utilizzare document.querySelectorAll di JavaScript". I selettori CSS sono solitamente ciò che desideri, non l'API di treewalking.

Passaggio 2: drammaturgo (quando JS esegue il rendering del contenuto)

Molte SPA moderne (React, Vue, Angular) forniscono un <div id="root"> vuoto e idratano tutto sul lato client. httpx.get ti dà una shell vuota: i dati che desideri vengono caricati tramite fetch dopo il caricamento della pagina.

Test: httpx.get(url).text: cerca i dati desiderati. Se non è presente, il sito necessita dell'esecuzione di JS.

▶ PYTHONeditable · runs in your browser

Installa: pip install playwright && playwright install chromium (il download del browser è di circa 150 MB: ne vale la pena una volta, doloroso per ogni esecuzione CI senza memorizzazione nella cache).

Costo: Playwright è 10-50 volte più lento di "httpx" (caricamento della pagina + esecuzione JS + sovraccarico del browser). Raggiungetelo solo quando i dati non sono nell'HTML statico.

I quattro modi per bloccarsi

La maggior parte dei sistemi anti-raschiamento rileva queste quattro impronte digitali:

1. User-Agent mancante/evidente

▶ PYTHONeditable · runs in your browser

2. Nessun ritardo tra le richieste

Richieste sequenziali grezze martellano un server. Aggiungi un ritardo proporzionale al tempo di risposta: se una pagina impiega 500 ms per essere pubblicata, attendi 500-2000 ms tra le richieste. "asyncio.sleep(random.uniform(0.5, 2.0))".

3. Richiesta di percorsi non consentiti /robots.txt

Alcuni siti utilizzano robots.txt per segnali di tariffa legittimi: controlla prima di eseguire lo scraping:

▶ PYTHONeditable · runs in your browser

4. Mancata corrispondenza tra TLS e l'impronta digitale del browser

Anti-scraping avanzato (Cloudflare, DataDome) rileva l'impronta digitale dell'handshake TLS e dell'ambiente JS. "httpx" non assomiglia per niente a Chrome a livello TLS. Opzioni:

  • curl_cffi — una libreria basata su curl-impersonate che imita il vero browser TLS.
  • Drammaturgo: vero browser TLS per definizione.
  • Ruotare i proxy residenziali: l'opzione nucleare.

Per il 99% dei casi d'uso (siti non ostili, volume moderato, accesso non richiesto), è sufficiente httpx + UA reale + ritardo + rispetto robots.txt. Se stai effettuando lo scraping di siti protetti da Cloudflare su larga scala, hai bisogno di browser reali o di servizi di sblocco a pagamento.

Limitazione della velocità (il semaforo + schema del sonno)

Per lo scraping di massa, combina asyncio.Semaphore (massimo simultaneo) con asyncio.sleep (ritardo per richiesta):

▶ PYTHONeditable · runs in your browser

Il limite massimo di 5-10 simultanei + 500ms-2s di ritardo per richiesta ti mantiene ben al di sotto di ciò che attiva gli allarmi di limite di velocità sulla maggior parte dei siti.

Norme legali + etiche

1. Leggi i Termini di servizio del sito. Molti vietano completamente lo scraping: puoi comunque farlo (il ToS è diritto contrattuale, non diritto penale nella maggior parte delle giurisdizioni), ma ti assumi il rischio legale. LinkedIn v. hiQ (2022) ha stabilito che lo scraping di dati pubblicamente visibili non è una violazione del CFAA negli Stati Uniti, ma indossare una felpa con cappuccio non ti rende invisibile.

2. Non raschiare dati personali. GDPR/CCPA/tutto il resto penalizza la raccolta di informazioni personali senza consenso. Se stai creando un set di dati di "dipendenti dell'azienda X", fermati.

Aggiunte etiche che tutti dimenticano:

  • Invia un indirizzo di contatto reale nel tuo UA. Se il tuo bot causa problemi, il proprietario del sito dovrebbe essere in grado di inviarti un'e-mail.
  • Se metti nella cache i dati del sito, fallo in modo aggressivo: non colpire i loro server ad ogni esecuzione.
  • Preferire le API pubbliche anche se a pagamento. Meno costoso del rischio legale.

Il riepilogo degli strumenti 2026

| Compito | Raggiungi |

|---|---|

| Pagine HTML statiche | httpx + BeautifulSoup(html, "lxml") |

| SPA con rendering JS | "Drammaturgo" (Chromium senza testa) |

| Cloudflare / anti-bot | curl_cffi o Drammaturgo + proxy residenziale |

| Raschiatura ad alto volume | httpx.AsyncClient + Semaforo + sleep |

| Dati API strutturati | httpx.get + .json() — non è necessaria alcuna zuppa |


Il web scraping nel 2026 è al 90% ancora "httpx + BeautifulSoup", oltre a sapere quando passare a un browser reale. Padroneggia le abitudini del "polite scraper" (UA reale, semaforo, sospensione, robots.txt) e costruirai pipeline di dati durevoli senza essere bloccato o citato in giudizio.

Passaggio successivo: il percorso di Data Science comprende 15 lezioni su scraping, ETL e panda: costruirai una vera pipeline end-to-end dal recupero HTTP a DataFrame all'esportazione CSV.

Pronto a provarlo?

15 lezioni gratuite previa iscrizione gratuita — nessuna tessera. Prova la piattaforma e poi decidi.

Inizia gratis →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.