Scrapy è un framework di alto livello per il web crawling ed il web scraping, viene usato per navigare tra le pagine in rete ed estrarre dati da esse. Scrapy può essere utilizzato per molteplici scopi dall’estrazione di dati a fini statistici, dal monitoraggio di prezzi, alla creazione di arvhivi e basi di dati ed al testing automation.
Uno dei principali vantaggi di Scrapy: è che le richieste vengono pianificate ed elaborate in modo asincrono. Ciò significa che Scrapy non ha bisogno di aspettare che una richiesta sia finita ed elaborata, può inviare un’altra richiesta o fare altre cose nel frattempo. Ciò significa anche che altre richieste possono continuare anche se alcune richieste falliscono o si verifica un errore durante la gestione permettendo di completare il lavoro di ricerca ed estrazione dati senza interruzioni del programma.
Sebbene ciò ti consenta di eseguire ricerche per indicizzazione molto veloci (inviando contemporaneamente più richieste simultanee, in modo tollerante ai guasti) Scrapy permette anche di avere il controllo della ricerca per indicizzazione attraverso alcune impostazioni. Puoi fare cose come impostare un ritardo di download tra ogni richiesta, limitare la quantità di richieste simultanee per dominio o per IP e persino usare un’estensione a limitazione automatica che prova a capirle automaticamente.
Panoramica dell’architettura
Il flusso di dati in Scrapy è controllato da un motore centrale (EXECUTION ENGINE) ed è rappresentato dai seguenti passaggi:
- Il motore ottiene gli indirizzi di partenza per far partire il crawler dai vari SPIDERS di un progetto.
- Il motore pianifica le richieste nell’utilità di pianificazione (SCHEDULER) e richiede la scansione delle richieste successive.
- Lo SCHEDULER restituisce le richieste successive al motore.
- Il motore invia le richieste al DOWNLOADER, passando attraverso i Downloader Middlewares (tramite i process_request ()).
- Una volta terminato il download della pagina, DOWNLOADER genera una risposta (con quella pagina) e la invia all’ENGINE, passando attraverso i Downloader Middlewares (tramite i process_response ()).
- Il motore riceve la risposta dal DOWNLOADER e la invia allo SPIDER per l’elaborazione, passando attraverso Spider Middleware (process_spider_input ()).
- Lo SPIDER elabora la risposta e restituisce gli oggetti raschiati dalla pagina e le nuove richieste (da seguire) al motore, passando attraverso il middleware Spider (process_spider_output ()).
- Il motore invia gli oggetti elaborati alle pipeline degli oggetti (ITEM PIPELINE), quindi invia le richieste elaborate all’utilità di pianificazione (SCHEDULER) e chiede eventuali richieste successive da sottoporre a scansione.
- Il processo si ripete (dal passaggio 1) fino a quando non ci sono più richieste dallo SCHEDULER.
Nota: il tutorial appena presentato è stato tratto dal tutorial ufficiale del sito del projetto scrapy.org. Viene presentato tradotto in Italiano per pura divulgazione a scopo educativo.