Andiamo a vedere come realizzare il nostro primo progetto in Scrapy, supponiamo che abbiate già provveduto all’installazione, ma se così non fosse è sufficiente utilizzare il gestore di pacchetti python pip scrivendo nel nostro terminale:

pip install scrapy

Molto semplice, in pochi istanti il nostro sistema sarà pronto per accettare il nostro primo comando con il quale andremo a creare un progetto Scrapy, basta editare:

scrapy startproject tutorial

Questo andrà a creare una directory chiamata tutorial con il seguente contenuto:

tutorial/
scrapy.cfg # file per le configurazioni
tutorial/  # directory dove scriveremo il nostro codice
__init__.py
items.py # file per la definizione degli item
middlewares.py # file per la definizione dei middlewares
pipelines.py # file per la definizione dei pipeline
settings.py # file per la definizione delle impostazioni
spiders/ # directory dove metteremo gli spiders
__init__.py

Il nostro primo Spider

Gli ‘Spiders‘ sono classi che Scrapy utilizza per raccogliere informazioni da un sito Web (o da un gruppo di siti Web). Devono sotto-classare scrapy.Spider e definire le richieste iniziali da effettuare, possiamo anche indicare eventualmente come seguire i collegamenti nelle pagine e come analizzare il contenuto della pagina scaricata per estrarre i dati.

Questo è il codice per il nostro primo Spider. Salvalo in un file chiamato ‘quotes_spider.py‘ nella directory tutorial / spiders nel tuo progetto:

import scrapy 

class QuotesSpider(scrapy.Spider):
name = "quotes"
  def start_requests(self):
urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
  for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
  def parse(self, response):
page = response.url.split("/")[-2]
filename = 'quotes-%s.html' % page
  with open(filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)

Abbiamo creato una classe QuoteSpider che è una sottoclasse scrapy.Spider e definisce alcuni attributi e metodi:

  • name: identifica il nostro Spider. Deve essere univoco all’interno di un progetto, ovvero non è possibile impostare lo stesso nome per Spider diversi.
  • start_requests (): deve restituire un iterabile di Requests (puoi restituire un elenco di URLs o scrivere una funzione generatore) da cui Spider inizierà a lavorare. Le richieste successive verranno generate successivamente da queste richieste iniziali.
  • parse (): un metodo che verrà chiamato per gestire la risposta scaricata per ciascuna delle richieste fatte. Il parametro response è un’istanza di TextResponse che contiene il contenuto della pagina e ha ulteriori metodi utili per gestirlo. Il metodo parse () di solito analizza la risposta, estraendo i dati scartati come dicts e anche trovando nuovi URL da seguire e creando nuove richieste da essi.

Lanciamo il nostro Spider

Per far funzionare il nostro ragno, saliamo nella directory del progetto ed eseguiamo:

scrapy crawl quotes

Questo comando esegue lo spider chiamato ‘quotes’ che abbiamo appena creato, ed invierà alcune richieste per il dominio quotes.toscrape.com come abbiamo indicato nella nostra funzione start_requests().

Ora controllando i file nella directory corrente. Possiamo notare che sono stati creati due nuovi file: quotes-1.html e quotes-2.html, con il contenuto dei i rispettivi URL, come indicato dal nostro metodo parse().

Scrapy ha pianificato gli oggetti scrapy.Request restituiti dal metodo start_requests del nostro Spider. Alla ricezione di una risposta per ciascuno, crea un’istanza di oggetti Response e chiama il metodo di callback associato alla richiesta (in questo caso, il metodo di parse) passando la risposta come argomento.

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.

Pubblicato da Ferro Mauro

Contattami se ha bisogno di una consulenza sulla sicurezza aziendale per difenderti dal social engineering