Condivisione della tecnologia

【Scrapy】Regole di impostazione del livello middleware di Scrapy

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


Permettimi di interpretare con gioia il ruolo del protagonista di una certa bellissima storia
Interpreta il ruolo dell'amante con cui hai condiviso i tuoi sogni negli ultimi anni
Cerchiamo di essere un tesoro che non versa più lacrime d'amore
Fingendo di avere le stesse scene di prima
Rivivi il ruolo del protagonista di una bellissima storia
Interpreta il ruolo dell'amante con cui hai condiviso i tuoi sogni negli ultimi anni
Anche se non capisci, sei ancora solo a tarda notte
Indossa il tuo maglione silenzioso come se fossi vicino a te
                     🎵 陈慧娴《傻女》


Scrapy è un potente framework crawler. Utilizzando il middleware, gli utenti possono personalizzare ed estendere il comportamento del crawler. Il middleware fornisce un meccanismo per le richieste e le risposte pre e post-elaborazione, consentendo agli utenti di migliorare la funzionalità del crawler senza modificare il codice principale.

In Scrapy, l'ordine in cui viene eseguito il middleware è determinato dalla loro "priorità". Comprendere e impostare correttamente la gerarchia del middleware è fondamentale per creare un crawler efficiente e manutenibile.

Cos'è il middleware?

Il middleware è un hook in Scrapy che consente agli utenti di eseguire codice personalizzato durante l'elaborazione di richieste e risposte. Il middleware si divide in due categorie:

  • Middleware del downloader: gestisce le richieste e le risposte relative al downloader.
  • Spider Middleware: gestisce input e output relativi allo spider.

Livello del middleware

Il livello del middleware determina l'ordine in cui vengono eseguiti. Scrapy utilizza un valore intero per rappresentare il livello del middleware. Quanto più piccolo è il valore, tanto prima viene eseguito il middleware.

  • Middleware per il download
    Il middleware del downloader si trova tra il downloader e il motore di Scrapy. Ecco una configurazione di esempio:
DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.CustomDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,
}
  • 1
  • 2
  • 3
  • 4
  • 5

Nella configurazione sopra:

CustomDownloaderMiddleware 的等级为 543
UserAgentMiddleware 的等级为 400
RetryMiddleware 的等级为 500
  • 1
  • 2
  • 3

La sequenza di esecuzione è la seguente:

UserAgentMiddleware(400)
RetryMiddleware(500)
CustomDownloaderMiddleware(543)
  • 1
  • 2
  • 3

Le richieste provengono dal motore, passano attraverso il middleware di livello inferiore e infine raggiungono il downloader. Quando la risposta ritorna dal downloader, passa prima attraverso il middleware di livello superiore e infine raggiunge il motore.

Middleware Spider

Il middleware del crawler si trova tra il motore e il crawler. Ecco una configurazione di esempio:

SPIDER_MIDDLEWARES = {
    'myproject.middlewares.CustomSpiderMiddleware': 543,
    'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
    'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
}
  • 1
  • 2
  • 3
  • 4
  • 5

Nella configurazione sopra:

CustomSpiderMiddleware 的等级为 543
HttpErrorMiddleware 的等级为 50
OffsiteMiddleware 的等级为 500
  • 1
  • 2
  • 3

La sequenza di esecuzione è la seguente:

HttpErrorMiddleware(50)
OffsiteMiddleware(500)
CustomSpiderMiddleware(543)
  • 1
  • 2
  • 3

Le richieste provengono dal motore, passano attraverso il middleware di livello inferiore e infine raggiungono il crawler. Quando la risposta ritorna dal crawler, passa prima attraverso il middleware di livello superiore e infine raggiunge il motore.

Come impostare il livello del middleware

Per impostare il livello del middleware, è necessario definire il dizionario corrispondente nel file di configurazione settings.py di Scrapy e specificare il percorso e il livello del middleware. Per esempio:

DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.CustomDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
}

SPIDER_MIDDLEWARES = {
    'myproject.middlewares.CustomSpiderMiddleware': 543,
    'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

In questo esempio, definiamo un middleware del downloader CustomDownloaderMiddleware e un middleware del crawler CustomSpiderMiddleware e impostiamo i loro livelli rispettivamente su 543.

Middleware comuni e relativi livelli predefiniti

Scrapy fornisce molti middleware integrati, ciascuno con un livello predefinito. Ecco alcuni middleware di downloader comuni e i relativi livelli predefiniti:

UserAgentMiddleware: 400
RetryMiddleware: 500
RedirectMiddleware: 600
CookiesMiddleware: 700
  • 1
  • 2
  • 3
  • 4

Per il middleware crawler, quelli comuni includono:

HttpErrorMiddleware: 50
OffsiteMiddleware: 500
RefererMiddleware: 700
  • 1
  • 2
  • 3

Insomma

Il middleware è una funzionalità potente nel framework Scrapy. Impostando correttamente il livello del middleware, puoi controllare con precisione l'elaborazione delle richieste e delle risposte. Comprendere e utilizzare le regole di impostazione del livello del middleware può aiutare a costruire un sistema crawler più flessibile ed efficiente.