Scrapy - Shell

Descripción

Scrapy shell se puede utilizar para eliminar los datos con código libre de errores, sin el uso de spider. El propósito principal de Scrapy shell es probar el código extraído, XPath o expresiones CSS. También ayuda a especificar las páginas web de las que está extrayendo los datos.

Configurar el Shell

El shell se puede configurar instalando la consola IPython (utilizada para la computación interactiva), que es un shell interactivo poderoso que proporciona la finalización automática, salida coloreada, etc.

Si está trabajando en la plataforma Unix, entonces es mejor instalar IPython. También puede usar bpython , si IPython es inaccesible.

Puede configurar el shell configurando la variable de entorno llamada SCRAPY_PYTHON_SHELL o definiendo el archivo scrapy.cfg de la siguiente manera:

[settings]
shell = bpython

Lanzamiento de Shell

Scrapy shell se puede iniciar usando el siguiente comando:

scrapy shell <url>

La URL especifica la URL para la que se deben extraer los datos.

Usando el Shell

El shell proporciona algunos accesos directos adicionales y objetos Scrapy como se describe en la siguiente tabla:

Atajos disponibles

Shell proporciona los siguientes accesos directos disponibles en el proyecto:

No Señor Atajo y descripción
1

shelp()

Proporciona los objetos y atajos disponibles con la opción de ayuda.

2

fetch(request_or_url)

Recopila la respuesta de la solicitud o URL y los objetos asociados se actualizarán correctamente.

3

view(response)

Puede ver la respuesta para la solicitud dada en el navegador local para su observación y para mostrar el enlace externo correctamente, agrega una etiqueta base al cuerpo de la respuesta.

Objetos Scrapy disponibles

Shell proporciona los siguientes objetos Scrapy disponibles en el proyecto:

No Señor Descripción del objeto
1

crawler

Especifica el objeto rastreador actual.

2

spider

Si no hay una araña para la URL actual, manejará la URL o el objeto araña definiendo la nueva araña.

3

request

Especifica el objeto de solicitud para la última página recopilada.

4

response

Especifica el objeto de respuesta para la última página recopilada.

5

settings

Proporciona la configuración actual de Scrapy.

Ejemplo de sesión de shell

Intentemos eliminar el sitio scrapy.org y luego comencemos a eliminar los datos de reddit.com como se describe.

Antes de seguir adelante, primero lanzaremos el shell como se muestra en el siguiente comando:

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

Scrapy mostrará los objetos disponibles mientras usa la URL anterior:

[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

A continuación, comience con el trabajo de los objetos, como se muestra a continuación:

>> 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     
...

Invocar el caparazón de las arañas para inspeccionar las respuestas

Puede inspeccionar las respuestas que se procesan desde la araña, solo si espera obtener esa respuesta.

Por ejemplo

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)

Como se muestra en el código anterior, puede invocar el caparazón de las arañas para inspeccionar las respuestas utilizando la siguiente función:

scrapy.shell.inspect_response

Ahora ejecute la araña y obtendrá la siguiente pantalla:

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'

Puede examinar si el código extraído funciona con el siguiente código:

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

Muestra la salida como

[]

La línea anterior ha mostrado solo una salida en blanco. Ahora puede invocar el shell para inspeccionar la respuesta de la siguiente manera:

>> view(response)

Muestra la respuesta como

True