0Pricing
Python Academy · Lezione

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 faster

Limitazione 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 delay

Rotazione 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 hits

Screenshot 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

  1. Richieste HTTP con requests e httpx
  2. Parsing dell'HTML con BeautifulSoup
  3. Creazione di uno spider Scrapy
  4. Gestione di JavaScript e misure anti-scraping
← Torna a Python Academy