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