0Pricing
Python Academy · Lezione

Creazione di uno spider Scrapy

Crei un progetto Scrapy, scriva uno spider e segua automaticamente i collegamenti.

Creazione di uno spider Scrapy è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 3 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.

Che cos'è Scrapy

Scrapy è un framework completo per il web scraping, con crawling asincrono integrato, pipeline degli item, middleware ed esportatori.

# pip install scrapy

# Create a project:
# scrapy startproject myspider

# myspider/
#   scrapy.cfg
#   myspider/
#     settings.py
#     spiders/
#       quotes_spider.py

Creazione di uno spider

Estenda scrapy.Spider, imposti name e start_urls, quindi implementi parse().

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = ["https://quotes.toscrape.com"]

    def parse(self, response):
        for quote in response.css("div.quote"):
            yield {
                "text": quote.css("span.text::text").get(),
                "author": quote.css("small.author::text").get(),
            }

Selettori CSS e XPath

Utilizzi response.css("selector") o response.xpath("//xpath") per estrarre i dati. .get() restituisce la prima corrispondenza; .getall() le restituisce tutte.

def parse(self, response):
    # CSS:
    titles = response.css("h2.title::text").getall()

    # XPath:
    links = response.xpath("//a/@href").getall()

    yield {"titles": titles, "links": links}

Seguire i link

Restituisca con yield una scrapy.Request per seguire un link e analizzare la pagina successiva.

import scrapy

class Spider(scrapy.Spider):
    name = "crawler"
    start_urls = ["https://quotes.toscrape.com"]

    def parse(self, response):
        for quote in response.css("div.quote"):
            yield {"text": quote.css("span.text::text").get()}

        next_page = response.css("li.next a::attr(href)").get()
        if next_page:
            yield response.follow(next_page, self.parse)

Item e ItemLoader

Definisca classi Item per strutturare i dati acquisiti e utilizzi ItemLoader per pulire e trasformare i campi.

import scrapy

class ProductItem(scrapy.Item):
    name  = scrapy.Field()
    price = scrapy.Field()
    url   = scrapy.Field()

def parse(self, response):
    item = ProductItem()
    item["name"]  = response.css("h1::text").get(strip=True)
    item["price"] = response.css(".price::text").re_first(r"[\d.]+")
    item["url"]   = response.url
    yield item

Esecuzione dello spider

Esegua lo spider dalla directory del progetto. Esporti i dati in JSON, CSV o tramite una pipeline personalizzata.

# Run and print to console:
# scrapy crawl quotes

# Save to JSON:
# scrapy crawl quotes -o quotes.json

# Save to CSV:
# scrapy crawl quotes -o quotes.csv

# Scrapy shell for interactive testing:
# scrapy shell "https://quotes.toscrape.com"

Impostazioni: DOWNLOAD_DELAY e CONCURRENT_REQUESTS

Rispetti i server: aggiunga ritardi e limiti le richieste concorrenti per evitare di sovraccaricarli.

# settings.py
DOWNLOAD_DELAY = 1          # 1 second between requests
CONCURRENT_REQUESTS = 8     # max 8 at a time
CONCURRENT_REQUESTS_PER_DOMAIN = 2
ROBOTSTXT_OBEY = True       # respect robots.txt

Middleware

I middleware intercettano richieste e risposte. Utilizzi quelli integrati per la rotazione dello user agent, i nuovi tentativi e i cookie.

# settings.py
DOWNLOADER_MIDDLEWARES = {
    "scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
    "scrapy.downloadermiddlewares.useragent.UserAgentMiddleware": None,
    "myspider.middlewares.RotateUserAgentMiddleware": 400,
}

Pipeline degli item

Le pipeline elaborano gli item dopo lo scraping: puliscono i dati, li convalidano, eliminano i duplicati e li salvano in un database.

# pipelines.py
class CleanPipeline:
    def process_item(self, item, spider):
        item["name"] = item["name"].strip()
        return item

class DBPipeline:
    def open_spider(self, spider):
        self.conn = connect_db()

    def process_item(self, item, spider):
        self.conn.insert(dict(item))
        return item

Gestione dell'accesso

Utilizzi FormRequest di Scrapy per inviare un modulo di accesso e mantenere il cookie di sessione.

import scrapy

class AuthSpider(scrapy.Spider):
    name = "auth"
    login_url = "https://example.com/login"

    def start_requests(self):
        yield scrapy.Request(self.login_url, self.login)

    def login(self, response):
        yield scrapy.FormRequest.from_response(
            response,
            formdata={"user": "me", "pass": "secret"},
            callback=self.parse
        )

scrapy-playwright per le pagine JS

Il plugin scrapy-playwright integra Playwright in Scrapy per le pagine renderizzate da JavaScript.

# pip install scrapy-playwright
# playwright install

# settings.py:
# DOWNLOAD_HANDLERS = {
#     "http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
#     "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
# }

# In spider:
# yield scrapy.Request(url, meta={"playwright": True})

Verifica rapida

Che cosa fa response.follow(href, callback) in uno spider Scrapy?

Riepilogo

Gli spider Scrapy estendono scrapy.Spider, dichiarano start_urls e producono con yield item o ulteriori Request da parse(). Utilizzi i selettori CSS/XPath, rispetti le buone pratiche con DOWNLOAD_DELAY e utilizzi le pipeline per rendere persistenti i dati.

Domande Frequenti

La lezione «Creazione di uno spider Scrapy» è gratuita?

Sì — il testo completo di «Creazione di uno spider Scrapy» è 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 «Creazione di uno spider Scrapy»?

Crei un progetto Scrapy, scriva uno spider e segua automaticamente i collegamenti. 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 3 di 4.

Quanto tempo richiede la lezione «Creazione di uno spider Scrapy»?

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