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