Scrapy - Shell

Descrizione

Scrapy shell può essere utilizzato per scartare i dati con codice privo di errori, senza l'uso di spider. Lo scopo principale della shell Scrapy è testare il codice estratto, XPath o le espressioni CSS. Aiuta anche a specificare le pagine web da cui stai raschiando i dati.

Configurazione della shell

La shell può essere configurata installando la console IPython (utilizzata per il calcolo interattivo), che è una potente shell interattiva che fornisce il completamento automatico, l'output colorato, ecc.

Se stai lavorando sulla piattaforma Unix, è meglio installare IPython. Puoi anche usare bpython , se IPython è inaccessibile.

È possibile configurare la shell impostando la variabile d'ambiente chiamata SCRAPY_PYTHON_SHELL o definendo il file scrapy.cfg come segue:

[settings]
shell = bpython

Avvio della shell

Scrapy Shell può essere lanciato utilizzando il seguente comando:

scrapy shell <url>

L' URL specifica l'URL per il quale i dati devono essere raschiati.

Utilizzando la Shell

La shell fornisce alcune scorciatoie aggiuntive e oggetti Scrapy come descritto nella tabella seguente:

Scorciatoie disponibili

Shell fornisce le seguenti scorciatoie disponibili nel progetto:

Suor n Collegamento e descrizione
1

shelp()

Fornisce gli oggetti e le scorciatoie disponibili con l'opzione di aiuto.

2

fetch(request_or_url)

Raccoglie la risposta dalla richiesta o dall'URL e gli oggetti associati verranno aggiornati correttamente.

3

view(response)

È possibile visualizzare la risposta per la richiesta data nel browser locale per l'osservazione e per visualizzare correttamente il collegamento esterno, aggiunge un tag di base al corpo della risposta.

Oggetti Scrapy disponibili

Shell fornisce i seguenti oggetti Scrapy disponibili nel progetto:

Suor n Oggetto e descrizione
1

crawler

Specifica l'oggetto crawler corrente.

2

spider

Se non è presente uno spider per l'URL attuale, gestirà l'URL o l'oggetto spider definendo il nuovo spider.

3

request

Specifica l'oggetto richiesta per l'ultima pagina raccolta.

4

response

Specifica l'oggetto risposta per l'ultima pagina raccolta.

5

settings

Fornisce le impostazioni Scrapy correnti.

Esempio di sessione di shell

Proviamo a eseguire lo scrapy del sito scrapy.org e quindi iniziamo a eliminare i dati da reddit.com come descritto.

Prima di andare avanti, per prima cosa avvieremo la shell come mostrato nel seguente comando:

scrapy shell 'http://scrapy.org' --nolog

Scrapy mostrerà gli oggetti disponibili durante l'utilizzo dell'URL sopra -

[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0x1e16b50>
[s]   item       {}
[s]   request    <GET http://scrapy.org >
[s]   response   <200 http://scrapy.org >
[s]   settings   <scrapy.settings.Settings object at 0x2bfd650>
[s]   spider     <Spider 'default' at 0x20c6f50>
[s] Useful shortcuts:
[s]   shelp()           Provides available objects and shortcuts with help option
[s]   fetch(req_or_url) Collects the response from the request or URL and associated 
objects will get update
[s]   view(response)    View the response for the given request

Quindi, inizia con il lavoro degli oggetti, mostrato come segue:

>> response.xpath('//title/text()').extract_first() 
u'Scrapy | A Fast and Powerful Scraping and Web Crawling Framework'  
>> fetch("http://reddit.com") 
[s] Available Scrapy objects: 
[s]   crawler     
[s]   item       {} 
[s]   request     
[s]   response   <200 https://www.reddit.com/> 
[s]   settings    
[s]   spider      
[s] Useful shortcuts: 
[s]   shelp()           Shell help (print this help) 
[s]   fetch(req_or_url) Fetch request (or URL) and update local objects 
[s]   view(response)    View response in a browser  
>> response.xpath('//title/text()').extract() 
[u'reddit: the front page of the internet']  
>> request = request.replace(method="POST")  
>> fetch(request) 
[s] Available Scrapy objects: 
[s]   crawler     
...

Invocare la shell dagli spider per esaminare le risposte

Puoi esaminare le risposte che vengono elaborate dallo spider, solo se ti aspetti di ottenere quella risposta.

Ad esempio:

import scrapy 

class SpiderDemo(scrapy.Spider): 
   name = "spiderdemo" 
   start_urls = [ 
      "http://mysite.com", 
      "http://mysite1.org", 
      "http://mysite2.net", 
   ]  
   
   def parse(self, response): 
      # You can inspect one specific response 
      if ".net" in response.url: 
         from scrapy.shell import inspect_response 
         inspect_response(response, self)

Come mostrato nel codice sopra, puoi invocare la shell dagli spider per ispezionare le risposte usando la seguente funzione:

scrapy.shell.inspect_response

Ora esegui il ragno e otterrai la seguente schermata:

2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200)  (referer: None) 
2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200)  (referer: None) 
2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200)  (referer: None) 
[s] Available Scrapy objects: 
[s]   crawler     
...  
>> response.url 
'http://mysite2.org'

È possibile verificare se il codice estratto funziona utilizzando il codice seguente:

>> response.xpath('//div[@class = "val"]')

Visualizza l'output come

[]

La riga sopra ha visualizzato solo un output vuoto. Ora puoi invocare la shell per ispezionare la risposta come segue:

>> view(response)

Visualizza la risposta come

True