Domanda

E 'possibile accedere ai miei modelli Django all'interno di una conduttura Scrapy, in modo da poter salvare i miei dati raschiati dritto al mio modello?

ho visto questo , ma non si è davvero ottenere come impostarlo up?

È stato utile?

Soluzione

Se qualcun altro sta avendo lo stesso problema, questo è come ho risolto.

ho aggiunto questo al mio Scrapy file 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: il percorso di cui sopra è per la vostra cartella del progetto Django, non il file settings.py.

Ora si avrà pieno accesso ai modelli Django all'interno del vostro progetto Scrapy.

Altri suggerimenti

La soluzione opposta (impostazione Scrapy in un comando di gestione 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:])

e in settings.py di Django:

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

Poi, invece di scrapy foo corsa ./manage.py scrapy foo.

UPD :. Fissato il codice per le opzioni di Django bypass analisi

Aggiungi DJANGO_SETTINGS_MODULE ENV nel settings.py del progetto Scrapy

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

Ora è possibile utilizzare DjangoItem nel progetto Scrapy.

Modifica:
Bisogna fare in modo che i progetti your_django_project settings.py è disponibile in PYTHONPATH.

Per Django 1.4, il layout del progetto è cambiato. Invece di /myproject/settings.py, il modulo delle impostazioni è in /myproject/myproject/settings.py.

Ho anche directory padre del percorso aggiunto (/ myproject) a sys.path per farlo funzionare correttamente.

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

Scopri django-dinamico-raschietto, integra un manager ragno Scrapy in un sito Django.

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

Perché non creare un file __init__.py nella cartella del progetto Scrapy e collegarlo a INSTALLED_APPS? Ha lavorato per me. Sono stato in grado di utilizzare semplicemente:

piplines.py

from my_app.models import MyModel

La speranza che aiuta.

setup-environ è deprecato. Potrebbe essere necessario effettuare le seguenti operazioni nel file delle impostazioni di Scrapy per le versioni più recenti di 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()

Aggiornamento minore per risolvere 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 dichiarazione SCRAPY_SETTINGS_MODULE è ancora necessaria.

os.environ.setdefault('SCRAPY_SETTINGS_MODULE', 'scrapy_project.settings')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top