Scrapy – Concha

Scrapy es un marco bien organizado, que se utiliza para el web scraping a gran escala. Usando selectores, como expresiones XPath o CSS, uno puede raspar datos sin problemas. Permite el rastreo sistemático, el raspado de datos y el almacenamiento del contenido en diferentes formatos de archivo. Scrapy viene equipado con un caparazón, que tiene diferentes usos. En este artículo, aprenderemos sobre Scrapy Shell.

Concha raspadora

Scrapy, viene con un shell interactivo que permite ejecutar comandos simples, raspar datos sin usar código araña y permite probar las expresiones escritas. Usando expresiones XPath o CSS, uno puede ver los datos raspados, pasando la URL, de la página web deseada. Para instalar Scrapy, use el siguiente comando en la terminal:

pip install Scrapy

Configurar el caparazón

Una vez que instalamos Scrapy, usando el comando pip, podemos ejecutar el shell, en la terminal Python estándar, en cualquier IDE escribiendo el comando:

scrapy shell

El shell Scrapy, por defecto, en PyCharm IDE Terminal, después de instalar la biblioteca Scrapy

Alternativamente, se puede usar IPython, un shell de comandos, para una variedad de lenguajes de programación. Es una opción rica que ofrece medios elegantes, sintaxis de shell, salida en color, información histórica y muchas más características. Es muy beneficioso si uno está trabajando en el sistema operativo UNIX. Cada proyecto de Scrapy tiene un archivo ‘scrapy.cfg’, que es un archivo de configuración. Podemos definir la configuración del proyecto aquí. Una vez que se crea un proyecto scrapy, usando el comando ‘startproject’, se puede establecer el valor de shell en ‘ipython’. Cree un proyecto Scrapy usando el comando ‘startproject’ como:

startproject Project_name

El archivo de configuración scrapy.cfg tal como está presente en un proyecto Scrapy

El archivo Scrapy.cfg está presente en su proyecto Scrapy creado. Para usar ipython, establezca el valor ‘shell’ en ‘ipython’, en scrapy.cfg como se muestra a continuación:

Establezca el valor de ‘shell’ en ‘ipython’ para usar IPython Shell

Además de IPython, también se puede configurar el shell ‘bpython’, que es otro intérprete de interfaz exquisito, para intérpretes de Python. 

Establezca el valor de ‘shell’ en ‘bpython’ para usar BPython Shell

También se puede establecer la variable de entorno, SCRAPY_PYTHON_SHELL en ‘ipython’ o ‘bpython’. En este artículo, estamos usando la terminal estándar de Python, para estudiar más a fondo el Shell.

Lanzar la concha

Para iniciar el shell, se puede usar el siguiente comando en la terminal:

scrapy shell

Después de ejecutar el comando, podemos ver los detalles como se muestra a continuación:

Ejecutando el comando ‘scrapy shell’ en la terminal

Si solo ejecutamos el comando, ‘scrapy shell’ en la terminal, entonces se inicia, la consola Telnet, para examinar y controlar el proceso Scrapy en ejecución. La consola Telnet está habilitada de forma predeterminada y es una extensión de Scrapy integrada. Es principalmente un shell de Python normal, que se ejecuta dentro del proceso Scrapy. De forma predeterminada, escucha el puerto 6023. Muestra información sobre middlewares habilitados, extensiones, etc. También muestra los objetos Scrapy disponibles y sus detalles. Por lo general, lanzamos un shell, pasando la URL de la página web, para que se raspe de la siguiente manera:

Sintaxis: scrapy shell <url_to_be_scraped> 

Ejemplo:

scrapy shell http://quotes.toscrape.com/tag/friends/

Inicie el shell con la URL ‘http://quotes.toscrape.com/tag/friendship/’

El shell está activo y la respuesta obtenida de la URL es como se muestra a continuación:

Spider se abre para la URL y se obtiene la respuesta

Después de ejecutar el comando anterior, obtenemos estadísticas sobre la consola Telnet, los objetos Scrapy, etc. Principalmente, dado que pasamos una URL, se abre el objeto araña y se muestra el código de respuesta. Si la solicitud fue exitosa, entonces se ve un código HTTP 200 en la salida.

Accesos directos disponibles en el Shell

Una vez que aprendemos a ejecutar el shell, podemos usarlo principalmente para probar el código de extracción. Antes de escribir cualquier código de araña de Python, se debe probar la página web, para raspar, usando el shell. El shell de Scrapy tiene algunos atajos disponibles. Una vez que lanzamos el shell, están disponibles. Vamos a repasarlos uno por uno:

shelp(): El comando shelp(), muestra la lista de Scrapy Objects y atajos útiles. Se puede ver que el objeto de solicitud representa la solicitud GET enviada al enlace http://quotes.toscrape.com/tag/friends/. Además, el objeto de respuesta contiene un código HTTP 200, lo que indica que la solicitud fue un éxito. Aparte de eso, menciona la ubicación del objeto Crawler y Spider.

Usando el atajo ‘shelp’ 

fetch(URL): La ‘URL’ es el enlace a la página web, necesitamos raspar. El atajo de búsqueda acepta una URL, la página web que se raspará. Devuelve la información de la araña y si la respuesta fue un éxito o un fracaso. En el siguiente ejemplo, tenemos una URL válida y una no válida. Dependiendo de la naturaleza de la solicitud, la recuperación muestra un código de error o de éxito.

fetch('http://quotes.toscrape.com/tag/friends/')

Usando el atajo de búsqueda (URL)

fetch(request):  podemos crear un objeto de solicitud y pasarlo al método fetch. Para hacerlo, crea un objeto de scrapy. La clase de solicitud menciona el método HTTP deseado, la URL de la página web, los encabezados, si los hay. Queremos raspar la URL ‘http://quotes.toscrape.com/tag/friends/’, entonces, preparamos el objeto de solicitud como:

fetch(request_object)

Usando el atajo fetch(requestObject)

vista (respuesta): el acceso directo de vista, abre la página web, en el navegador predeterminado. La página web es la que se envió como objeto de solicitud o URL en el método de obtención. Por lo tanto, cuando escribimos vista (respuesta), después de la búsqueda anterior (solicitud), la página web se abre en el navegador predeterminado.

view(response)

Usando el atajo de vista (respuesta)

 La página web es un archivo temporal, creado en la máquina local. Se puede ver en el navegador de la siguiente manera:

Página web abierta con vista (respuesta) 

Objetos raspados en el caparazón

Después de usar el atajo de búsqueda, con una URL o un objeto de solicitud, podemos verificar los objetos Scrapy disponibles. Veamos los objetos Scrapy disponibles –

Crawler: una vez que se ejecuta el método fetch, podemos obtener información sobre el objeto Crawler actual. El objeto Crawler proporciona acceso a los componentes principales de Scrapy. El objeto del rastreador generalmente se instancia con el objeto Spider y Settings. El rastreador rastrea una página web, con la ayuda de un objeto de araña, creado en función de la URL. 

crawler

Solicitud; Después del método fetch(), obtenemos detalles de la URL que se envió como solicitud. Nos dice, si el método de solicitud utilizado, fue un GET o POST, o cualquier otro junto con la URL.

Usando Solicitar objeto scrapy 

Respuesta: Después de ejecutar fetch(), podemos verificar los detalles de la respuesta recibida. Uno puede probar el código de raspado, para ser usado en código araña, usando el objeto de respuesta. El código de raspado se escribe usando selectores, con expresiones XPath o CSS.

Usando el objeto scrapy de respuesta

Como se muestra arriba, podemos obtener el código HTML de toda la página escribiendo response.text en el shell. Veamos cómo podemos probar el código de extracción, utilizando el objeto de respuesta, con expresiones XPath o CSS. Scrapy permite el uso de selectores para raspar cierta información requerida de las páginas web. Estos selectores navegan a las etiquetas HTML y recuperan datos de ellas.

Configuración: el objeto de configuración de Scrapy nos permite personalizar numerosos comportamientos de los componentes de Scrapy, como el núcleo de Scrapy, las extensiones, las arañas y muchos más. Tenemos la opción, de establecer valores, relacionados con FTP Password, HTTPCACHE, exportaciones FEED, TELNETCONSOLE, y muchos más.

Setting

Uso de la configuración del objeto Scrapy

Invocar Shell de Scrapy Spiders

A veces, es necesario analizar el objeto de respuesta en el código araña creado. Esto se puede hacer creando una araña y, refiriéndose al módulo Shell, desde el código. Para obtener información sobre el mismo, siga los pasos:

Paso 1: Cree un proyecto Scrapy Spider: el proyecto Spider se puede crear usando ‘startproject’ en la terminal como

scrapy startproject gfg_learnshell

Este comando creará un proyecto o carpeta de Scrapy llamado ‘gfg_learnshell’, que contiene todos los archivos de configuración de Scrapy necesarios. También crea una carpeta Spider, donde se puede escribir todo el código relacionado con las arañas. El ‘startproject’ es como se muestra a continuación:

Cree un proyecto Scrapy usando el comando startproject

Paso 2: Cree un archivo Spider Python, luego cambie el directorio a la carpeta recién creada ‘gfg_learnshell’. Cree un archivo Spider Python, mencionando la URL, para desecharlo, usando el comando ‘genspider’ como:

scrapy genspider spider_name url_to_be_scraped

En este ejemplo, rasparemos la página web ‘http://quotes.toscrape.com/tag/friends/’. Por lo tanto, ejecutaremos el comando, en la terminal como:

scrapy genspider learnshell quotes.toscrape.com/tag/friends

El comando anterior creará un archivo Python, llamado ‘learnshell.py’, en la carpeta spiders. Esta es nuestra araña, donde está escrito el código de raspado. El código de araña, por defecto, se ve así:

Python3

# Import the required Scrapy library
import scrapy
  
# The Spider class created
class LearnshellSpider(scrapy.Spider):
      
    # Name of spider mentioned in 'genspider'
    # command
    name = 'learnshell'
      
    # The domain to be scraped
    allowed_domains = ['quotes.toscrape.com/tag/friends/']
      
    # The allowed URLs to be scraped
    start_urls = ['http://quotes.toscrape.com/tag/friends/']
  
    # The default callback parse method
    def parse(self, response):
        pass

Invocaremos Scrapy Shell desde el código e inspeccionaremos una respuesta. Ahora, el código de araña es como se muestra a continuación:

Python3

# Import the required libraries
import scrapy
  
# The Spider code
class LearnshellSpider(scrapy.Spider):
      
    # Name of the spider
    name = 'learnshell'
  
    # The domain allowed for scraping
    allowed_domains = ['quotes.toscrape.com/tag/friends']
  
    # The URL(s) to be scraped
    start_urls = ['http://quotes.toscrape.com/tag/friends/']
  
    # Default callback method called when a spider crawls
    def parse(self, response):
        if "quotes" in response.url:
  
           # Invoke the Scrapy Shell and inspect the response
            from scrapy.shell import inspect_response
  
            # Inspect the response
            inspect_response(response, self)
  
            # Execute rest of the code after
            # inspecting the response at shell and exit()
            # XPath selector for fetching the author names
            quotes = response.xpath('//*[@class="author"]/text()').extract()
  
            # The spider crawls and prints the authors
            # present on the URL
            yield{'Authors': quotes}

Explicación:

  • El nombre de la araña, el dominio permitido y la URL se asignan cuando ejecutamos el comando ‘genspider’.
  • El método de análisis predeterminado es un método de devolución de llamada, llamado cuando la araña rastrea. Devuelve un objeto de respuesta.
  • Estamos invocando el shell Scrapy, usando el módulo scrapy.shell. Tiene un método ‘inspect_response’, que nos permite inspeccionar cualquier expresión Selector en el shell. Por lo tanto, cuando ejecutamos el código spider usando la sintaxis de ‘rastreo’, abre la ventana de shell, entre las ejecuciones, y nos permite inspeccionar cualquier respuesta. La sintaxis de rastreo es ‘scrapy crawl spider_name’.

Ejecute spider usando el comando ‘rastrear’

Paso 3: Entonces, entre la ejecución, si escribimos cualquier sintaxis en el shell, por ejemplo, verifique la longitud del cuerpo de la respuesta usando el comando:

len(response.text)

Inspeccione el objeto de respuesta entre la ejecución del código de araña

La inspección anterior es posible, ya que hemos utilizado el método inspect_response en el código Spider python. Una vez que escribimos exit(), saldremos del shell y el resto de la ejecución del código araña estará listo. Es como se muestra a continuación: 

Después de exit(), el resto del código de araña se ejecuta y raspa

Después de exit(), se ejecuta el resto del código de python y se extraen los nombres de los autores, de acuerdo con los selectores escritos en el código. 

Publicación traducida automáticamente

Artículo escrito por phadnispradnya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *