Primers Pasos
Vamos a utilizar Django
para acceder, almacenar y probablemente presentar también de manera sencilla los datos que queremos extraer con Scrapy
.
También necesitaremos la extensión scrapy-djangoitem
que conectará el modelo de datos de los dos frameworks.
El proyecto de Scrapy debería estar dentro del proyecto de Django, al mismo nivel que una app.
Si estás leyendo este post, supongo que tienes un conocimiento básico de cómo funcionan Djngo y Srapy. Si no, te recomiendo que eches un vistazo a los siguientes enlaces:
- Instalar Django:
pip install django
- Nuevo proyecto de Django:
django-admin startproject mysite
- Nuava app de Django:
python manage.py startapp polls
- Instalar Scrapy:
pip install Scrapy
- Instalar scrapy-djangoitem:
pip install scrapy-djangoitem
- Nuevo proyecto y spider en Scrapy:
pip install django
Configuración de Django
Asegúrate de añadir la app de Django y el proyecto de Scrapy al archivo de configuración del proyecto de Django django-project/django-project/settings.py
:
Configuración de Scrapy
Necesitamos añadir un archivo init.py vacio en django-project/scrapy-project/__init__.py
y en django-project/scrapy-project/spiders/__init__.py
para que Django reconozca el proyecto de Scrapy como un paquete.
Para que Django y Scrapy sean capaces de comunicarse, también es necesario modificar el archivo de configuración de django-project/scrapy-project/settings.py
:
Es necesario crear django-project/scrapy-project/apps.py
para que el proyecto de Scrapy sea identificado por Django como una app:
En django-project/scrapy-project/items.py
se crean los Items de Scrapy, que heredan de DjangoItem y los asignamos al modelo de Django en la variable django_model
:
Tras esto, los DjangoItems están listos para ser usados en el spider. También podemos acceder al modelo de Django a través del ORM de Django (borrar, crear, consultas…). django-project/scrapy-project/spiders/spider.py
Generalmente se usará un Item Pipeline para limpiar, eliminar dublicados y almacener un item en la base de datos (aunque también es posible realizarlo dentro del spider, dependiendo de las necesidades) django-project/scrapy-project/spiders/pipelines.py
:
También, es posible interactuar con los objetos DjangoItem de Scrapy o con los objetos Django con los imports que se muestran arriba..
Por último, es necesrio habilitar los pipelines en el fichero de configuración de Scrapy django-project/scrapy-project/settings.py
HAPPY SCRAPING!
Intentaré realizar más entradas en el blog para explorar los siguientes puntos:
Normalmente se usa la linea de comandos para empezar un crawler. Pero si quieres realizar un scrapeo recurrente, probablemente será necesario hacer lo siguiente:
- De forma Programática: utilizando un sistema asíncrono de mensajería como Celery y un broker como RabbitMQ
- Desde las vistas: lanzando los spiders desde las vistas de Django con ‘python-scrapyd-api’, tal y como explican en [How to use Scrapy with Django Application](https://medium.com/@ali_oguzhan/how-to-use-scrapy-with-django-application-c16