queryset query example python django scrapy

python - query - Acceda a los modelos django dentro de Scrapy



django queryset to list (8)

¿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 this , pero realmente no entiendo cómo configurarlo?


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

piplines.py

from my_app.models import MyModel

Espero que ayude.


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:])

Aún se requiere la declaración SCRAPY_SETTINGS_MODULE.

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


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

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

Ahora puede usar DjangoItem en su proyecto de scrapy.

Editar:
Debes asegurarte de que el proyecto your_django_project projects settings.py está disponible en PYTHONPATH .



La solución opuesta (setup scrapy en un comando de administración 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 ejecuta ./manage.py scrapy foo .

UPD : corrigió el código para eludir el análisis de las opciones de django.


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 padre 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/'')


Si alguien más está teniendo 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 para su carpeta de proyecto django, no para el archivo settings.py.

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


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()