34 votes

Accéder aux modèles Django à l'intérieur de Scrapy

Est-il possible d'accéder à mes modèles django à l'intérieur d'un pipeline Scrapy, afin de pouvoir enregistrer mes données récupérées directement dans mon modèle?

Je l' ai vu ce , mais je ne comprends pas vraiment comment le configurer?

26voto

bababa Points 1949

Si quelqu'un d'autre a le même problème, c'est comme ça que je l'ai résolu.

J'ai ajouté ceci à mon fichier 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/')
 

Remarque: le chemin ci-dessus est vers votre dossier de projet django, pas le fichier settings.py.

Maintenant, vous aurez un accès complet à vos modèles django dans votre projet scrapy.

21voto

Mikhail Korobov Points 6225

La solution inverse (configuration de scrapy dans une commande de gestion 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:])
 

et dans settings.py de django:

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

Puis au lieu de scrapy foo exécutez ./manage.py scrapy foo .

UPD : correction du code pour contourner l'analyse des options de django.

16voto

Jet Guo Points 168

Ajoutez DJANGO_SETTINGS_MODULE env dans les paramètres de votre projet scrapy.py

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

Vous pouvez maintenant utiliser DjangoItem dans votre projet scrapy.

Éditer:
Vous devez vous assurer que le your_django_project projets settings.py est disponible dans PYTHONPATH .

2voto

samwize Points 4144

Pour Django 1.4, la disposition du projet a changé. Au lieu de /myproject/settings.py, le module de paramètres se trouve dans /myproject/myproject/settings.py.

J'ai également ajouté le répertoire parent de path (/ myproject) à sys.path pour le faire fonctionner correctement.

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

1voto

Sectio Aurea Points 155

Découvrez django-dynamic-scraper, il intègre un gestionnaire d'araignées Scrapy dans un site Django.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X