Accede a los modelos django dentro de Scrapy.

¿Es posible acceder a mis modelos de django dentro de una tubería de Scrapy, de modo que pueda guardar mis datos raspados directamente en mi modelo?

He visto esto , pero realmente no entiendo cómo configurarlo?

Si alguien más tiene el mismo problema, así es como lo resolví.

Agregué esto a mi archivo scrapy settings.py:

def setup_django_env(path): import imp, os from django.core.management import setup_environ f, filename, desc = imp.find_module('settings', [path]) project = imp.load_module('settings', f, filename, desc) setup_environ(project) setup_django_env('/path/to/django/project/') 

Nota: la ruta anterior es a su carpeta de proyecto de django, no al archivo settings.py.

Ahora tendrá acceso completo a sus modelos de django dentro de su proyecto de scrapy.

La solución opuesta (setup scrapy en un comando de administración de django):

 # -*- coding: utf-8 -*- # myapp/management/commands/scrapy.py from __future__ import absolute_import from django.core.management.base import BaseCommand class Command(BaseCommand): def run_from_argv(self, argv): self._argv = argv self.execute() def handle(self, *args, **options): from scrapy.cmdline import execute execute(self._argv[1:]) 

y en settings.py de django:

 import os os.environ['SCRAPY_SETTINGS_MODULE'] = 'scrapy_project.settings' 

Luego, en lugar de scrapy foo ejecute ./manage.py scrapy foo .

UPD : arreglado el código para omitir el análisis de opciones de django.

Agrega DJANGO_SETTINGS_MODULE env en la configuración de tu proyecto descarado.py

 import os os.environ['DJANGO_SETTINGS_MODULE'] = 'your_django_project.settings' 

Ahora puedes usar DjangoItem en tu proyecto de scrapy.

Editar:
Debes asegurarte de que your_django_project proyecto_django_proyecto settings.py está disponible en PYTHONPATH .

Para Django 1.4, el diseño del proyecto ha cambiado. En lugar de /myproject/settings.py, el módulo de configuración se encuentra en /myproject/myproject/settings.py.

También agregué el directorio principal de la ruta (/ myproject) a sys.path para que funcione correctamente.

 def setup_django_env(path): import imp, os, sys from django.core.management import setup_environ f, filename, desc = imp.find_module('settings', [path]) project = imp.load_module('settings', f, filename, desc) setup_environ(project) # Add path's parent directory to sys.path sys.path.append(os.path.abspath(os.path.join(path, os.path.pardir))) setup_django_env('/path/to/django/myproject/myproject/') 

Echa un vistazo a django-dynamic-scraper, integra un administrador de araña Scrapy en un sitio de Django.

https://github.com/holgerd77/django-dynamic-scraper

¿Por qué no crea un archivo __init__.py en la carpeta del proyecto scrapy y lo conecta en INSTALLED_APPS ? Trabajó para mi. Pude simplemente usar:

piplines.py

 from my_app.models import MyModel 

Espero que ayude.

setup-environ está en desuso. Es posible que deba hacer lo siguiente en el archivo de configuración de scrapy para las versiones más recientes de django 1.4+

 def setup_django_env(): import sys, os, django sys.path.append('/path/to/django/myapp') os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings' django.setup() 

Actualización menor para resolver KeyError. Python (3) / Django (1.10) / Scrapy (1.2.0)

 from django.core.management.base import BaseCommand class Command(BaseCommand): help = 'Scrapy commands. Accessible from: "Django manage.py". ' def __init__(self, stdout=None, stderr=None, no_color=False): super().__init__(stdout=None, stderr=None, no_color=False) # Optional attribute declaration. self.no_color = no_color self.stderr = stderr self.stdout = stdout # Actual declaration of CLI command self._argv = None def run_from_argv(self, argv): self._argv = argv self.execute(stdout=None, stderr=None, no_color=False) def handle(self, *args, **options): from scrapy.cmdline import execute execute(self._argv[1:]) 

La statement SCRAPY_SETTINGS_MODULE todavía es necesaria.

 os.environ.setdefault('SCRAPY_SETTINGS_MODULE', 'scrapy_project.settings')