GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo crear arañas web con Scrapy

Scrapy es un marco de código abierto desarrollado en Python que le permite crear arañas web o rastreadores para extraer información de sitios web de forma rápida y sencilla.

Esta guía muestra cómo crear y ejecutar una araña web con Scrapy en su servidor para extraer información de páginas web mediante el uso de diferentes técnicas.

Primero, conéctese a su servidor a través de una conexión SSH. Si aún no lo ha hecho, se recomienda seguir nuestra guía para conectarse de forma segura con SSH. En caso de un servidor local, vaya al siguiente paso y abra la terminal de su servidor.

Creación del entorno virtual

Antes de comenzar la instalación real, continúe actualizando los paquetes del sistema:

$ sudo apt-get update

Continúe instalando algunas dependencias necesarias para la operación:

$ sudo apt-get install python-dev python-pip libxml2-dev zlib1g-dev libxslt1-dev libffi-dev libssl-dev

Una vez completada la instalación, puede comenzar a configurar virtualenv, un paquete de Python que le permite instalar paquetes de Python de forma aislada, sin comprometer otros softwares. Aunque es opcional, los desarrolladores de Scrapy recomiendan encarecidamente este paso:

$ sudo pip install virtualenv

Luego, prepare un directorio para instalar el entorno Scrapy:

$ sudo mkdir /var/scrapy
$ cd /var/scrapy

E inicializa un entorno virtual:

$ sudo virtualenv /var/scrapy

New python executable in /var/scrapy/bin/python

Installing setuptools, pip, wheel...

done.

Para activar el entorno virtual, simplemente ejecute el siguiente comando:

$ sudo source /var/scrapy/bin/activate

Puede salir en cualquier momento mediante el comando "desactivar".

Instalación de Scrapy

Ahora, instala Scrapy y crea un nuevo proyecto:

$ sudo pip install Scrapy
$ sudo scrapy startproject example
$ cd example

En el directorio del proyecto recién creado, el archivo tendrá la siguiente estructura:

example/

scrapy.cfg       # configuration file

example/        # module of python project

__init__.py

items.py      

middlewares.py   

pipelines.py    
    
settings.py     # project settings

spiders/     

__init__.py

Uso del shell con fines de prueba

Scrapy te permite descargar el contenido HTML de las páginas web y extrapolar información de ellas mediante el uso de diferentes técnicas, como los selectores css. Para facilitar este proceso, Scrapy proporciona un "shell" para probar la extracción de información en tiempo real.

En este tutorial, verá cómo capturar la primera publicación en la página principal del famoso Reddit social:

Antes de pasar a la escritura de la fuente, intente extraer el título a través del shell:

$ sudo scrapy shell "reddit.com"

En unos segundos, Scrapy habrá descargado la página principal. Entonces, ingrese comandos usando el objeto 'respuesta'. Como, en el siguiente ejemplo, use el selector "artículo h3 ::texto":, para obtener el título de la primera publicación

>>> response.css('article h3::text')[0].get()

Si el selector funciona correctamente, se mostrará el título. Luego, salga del shell:

>>> exit()

Para crear una nueva araña, cree un nuevo archivo de Python en el directorio del proyecto ejemplo / arañas / reddit.py:

import scrapy
                

class RedditSpider(scrapy.Spider):

name = "reddit"
                

def start_requests(self):

yield scrapy.Request(url="https://www.reddit.com/", callback=self.parseHome)
                

def parseHome(self, response):

headline = response.css('article h3::text')[0].get()
                

with open( 'popular.list', 'ab' ) as popular_file:

popular_file.write( headline + "\n" )

Todas las arañas heredan la clase Spider del módulo Scrapy e inician las solicitudes usando el método start_requests:

yield scrapy.Request(url="https://www.reddit.com/", callback=self.parseHome)

Cuando Scrapy haya terminado de cargar la página, llamará a la función de devolución de llamada (self.parseHome).

Teniendo el objeto de respuesta, se puede tomar el contenido de su interés:

headline = response.css('article h3::text')[0].get()

Y, para fines de demostración, guárdelo en un archivo "popular.list".

Inicie la araña recién creada usando el comando:

$ sudo scrapy crawl reddit

Una vez completado, el último título extraído se encontrará en el archivo popular.list:

$ cat popular.list

Programación de Scrapyd

Para programar la ejecución de sus arañas, utilice el servicio ofrecido por Scrapy "Scrapy Cloud" (consulte https://scrapinghub.com/scrapy-cloud) o instale el demonio de código abierto directamente en su servidor .

Asegúrese de estar en el entorno virtual creado anteriormente e instale el paquete scrapyd a través de pip:

$ cd /var/scrapy/

$ sudo source /var/scrapy/bin/activate

$ sudo pip install scrapyd

Una vez completada la instalación, prepare un servicio creando el archivo /etc/systemd/system/scrapyd.service con el siguiente contenido:

[Unit]

Description=Scrapy Daemon

[Service]

ExecStart=/var/scrapy/bin/scrapyd

Guarde el archivo recién creado e inicie el servicio a través de:

$ sudo systemctl start scrapyd

Ahora, el demonio está configurado y listo para aceptar nuevas arañas.

Para implementar su araña de ejemplo, necesita usar una herramienta, llamada 'scrapyd-client', proporcionada por Scrapy. Proceder a su instalación vía pip:

$ sudo pip install scrapyd-client

Continúe editando el archivo scrapy.cfg y configurando los datos de implementación:

[settings]

default = example.settings
    
[deploy]

url = http://localhost:6800/

project = example

Ahora, implemente simplemente ejecutando el comando:

$ sudo scrapyd-deploy

Para programar la ejecución de la araña, simplemente llame a la API de scrapyd:

$ sudo curl http://localhost:6800/schedule.json -d project=example -d spider=reddit

Linux
  1. Cómo crear una base de datos en MySQL con MySQL Workbench

  2. ¿Cómo crear una máquina virtual desde cero con Virsh?

  3. ¿Cómo crear un nuevo usuario con acceso Ssh?

  4. Cómo crear un sitio web con SitePad

  5. ¿Cómo crear un archivo con un tamaño determinado en Linux?

Cómo crear contenedores Proxmox desde el panel de interfaz de usuario web de Proxmox

Cómo crear un grupo de volúmenes en Linux con LVM

Cómo crear documentos con scripts Bash

Cómo instalar Calibre Web en Ubuntu 20.04 con Docker

Cómo crear una aplicación web con Node.js en Jelastic Cloud

Cómo crear un comercio electrónico con Magento