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
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 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:
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.
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:
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/
El shell está activo y la respuesta obtenida de la URL es como se muestra a continuación:
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.
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/')
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)
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)
La página web es un archivo temporal, creado en la máquina local. Se puede ver en el navegador de la siguiente manera:
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.
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.
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
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:
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’.
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)
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(), 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