Andere Tipps

Die entgegengesetzte Lösung (Setup scrapy in einem django-Management-Befehl):

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

und in Djangos settings.py:

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

Dann statt scrapy foo Lauf ./manage.py scrapy foo.

UPD :. Der Code in den Bypass-Djangos Optionen festgelegt Parsen

In DJANGO_SETTINGS_MODULE env in Ihrem scrapy Projekt settings.py

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

Jetzt können Sie DjangoItem in Ihrem scrapy Projekt verwenden.

Edit:
Sie müssen sicherstellen, dass die your_django_project Projekte settings.py in PYTHONPATH zur Verfügung.

Für Django 1.4 hat das Projekt das Layout geändert. Statt /myproject/settings.py ist das Einstellungsmodul in /myproject/myproject/settings.py.

Ich auch hinzugefügt Pfad übergeordnetes Verzeichnis (/ myproject) zu sys.path, um es richtig zu arbeiten.

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

Warum nicht eine __init__.py Datei im scrapy Projektordner erstellen und in INSTALLED_APPS anschließen? Arbeitete für mich. Ich konnte einfach verwenden:

piplines.py

from my_app.models import MyModel

Ich hoffe, das hilft.

setup-environ ist veraltet. Unter Umständen müssen Sie die folgenden in scrapy der Einstellungsdatei für neuere Versionen von Django 1.4 +

tun
def setup_django_env():
    import sys, os, django

    sys.path.append('/path/to/django/myapp')
    os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

django.setup()

Minor-Update zu lösen 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:])

Die SCRAPY_SETTINGS_MODULE Erklärung ist weiterhin erforderlich.

os.environ.setdefault('SCRAPY_SETTINGS_MODULE', 'scrapy_project.settings')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top