Gestione di JavaScript e misure anti-scraping
Utilizzi Playwright/Selenium per i contenuti generati da JavaScript e il rate limiting.
Gestione di JavaScript e misure anti-scraping è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.
Perché JavaScript è importante
I siti moderni eseguono il rendering dei contenuti con JavaScript dopo il caricamento della pagina. Gli scraper di HTML statico come requests+BS4 vedono lo scheletro, non il DOM renderizzato.
# Static scraper sees:
# <div id="app"></div>
# Rendered page has:
# <div id="app">
# <h1>Product List</h1>
# <ul>... dynamically loaded items ...</ul>
# </div>Playwright per Python
Playwright controlla programmaticamente un browser reale (Chromium, Firefox, WebKit). Attende che JavaScript venga eseguito prima di estrarre i contenuti.
# pip install playwright
# playwright install
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://example.com")
title = await page.inner_text("h1")
print(title)
await browser.close()
asyncio.run(main())Attesa degli elementi
Utilizzi page.wait_for_selector() per attendere che un elemento compaia nel DOM prima di estrarre i dati.
from playwright.async_api import async_playwright
import asyncio
async def scrape():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://spa-example.com")
await page.wait_for_selector(".product-list")
items = await page.query_selector_all(".product-item")
texts = [await i.inner_text() for i in items]Selenium
Selenium è una libreria meno recente per l'automazione dei browser. Playwright è preferibile per i nuovi progetti grazie al migliore supporto asincrono e alla maggiore velocità.
# pip install selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://example.com")
elem = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "h1"))
)
print(elem.text)
driver.quit()Modalità headless
Esegua i browser in modalità headless (senza una finestra visibile) per lo scraping lato server.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True) # no window
page = await browser.new_page()
await page.goto("https://example.com")
html = await page.content()
await browser.close()Intercettazione delle richieste di rete
Playwright può intercettare e simulare le richieste di rete, una funzione utile per bloccare annunci e tracker o acquisire direttamente le risposte delle API.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.route("**/*.{png,jpg,css}", lambda route: route.abort())
await page.goto("https://example.com") # loads 3x fasterLimitazione della frequenza e ritardi
Imiti il comportamento umano: aggiunga ritardi casuali tra le richieste e limiti la frequenza per evitare di attivare i sistemi anti-bot.
import time, random
def polite_scrape(urls):
for url in urls:
fetch(url)
time.sleep(random.uniform(1, 3)) # 1-3 s random delayRotazione degli User-Agent
Ruoti le stringhe User-Agent per evitare il blocco basato sullo User-Agent predefinito dello scraper.
import requests, random
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...",
]
def fetch(url):
return requests.get(url, headers={"User-Agent": random.choice(USER_AGENTS)})Cookie e sessioni
Mantenga i cookie di sessione per rimanere autenticato tra le richieste. Sia requests Session sia Playwright gestiscono automaticamente i cookie.
import requests
with requests.Session() as s:
s.post("https://example.com/login", data={"user":"me","pass":"pw"})
# session cookie kept automatically:
dashboard = s.get("https://example.com/dashboard")CAPTCHA e considerazioni legali
I CAPTCHA sono misure anti-bot. Risolverli programmaticamente è tecnicamente possibile (2captcha, anti-captcha), ma solleva questioni etiche e legali. Verifichi sempre il file robots.txt e i Termini di servizio del sito prima di eseguire lo scraping.
# Before scraping:
# 1. Check robots.txt: https://example.com/robots.txt
# 2. Review the Terms of Service for "scraping" or "automated access" clauses
# 3. Only scrape public data
# 4. Honour Crawl-delay directives
# 5. Cache responses to avoid repeated hitsScreenshot e PDF con Playwright
Playwright può acquisire screenshot o stampare pagine in PDF — funzioni utili per i test visivi e l'archiviazione.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://example.com")
await page.screenshot(path="page.png", full_page=True)
await page.pdf(path="page.pdf")
await browser.close()Verifica rapida
Perché requests + BeautifulSoup non funziona su molti siti web moderni?
Riepilogo
Utilizzi Playwright o Selenium per le pagine renderizzate da JavaScript. Esegua il codice in modalità headless sui server. Aggiunga ritardi e ruoti gli User-Agent per evitare blocchi. Intercetti le richieste di rete per bloccare i tracker. Rispetti sempre robots.txt e i Termini di servizio.
Domande Frequenti
La lezione «Gestione di JavaScript e misure anti-scraping» è gratuita?
Sì — il testo completo di «Gestione di JavaScript e misure anti-scraping» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.
Cosa imparerò in «Gestione di JavaScript e misure anti-scraping»?
Utilizzi Playwright/Selenium per i contenuti generati da JavaScript e il rate limiting. Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Python Academy?
Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Gestione di JavaScript e misure anti-scraping»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Python Academy?
Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Richieste HTTP con requests e httpx
- Parsing dell'HTML con BeautifulSoup
- Creazione di uno spider Scrapy
- Gestione di JavaScript e misure anti-scraping