質問

スクラピーパイプライン内にDjangoモデルにアクセスすることは可能ですか。そうすれば、スクレイプされたデータをモデルに直接保存できるようにしますか?

私は見た これ, 、しかし、私はそれをセットアップする方法を本当に手に入れませんか?

役に立ちましたか?

解決

他の誰かが同じ問題を抱えている場合、これが私がそれを解決した方法です。

私はこれを私に追加しました スクラピー 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/')

注:上記のパスは、settings.pyファイルではなく、djangoプロジェクトフォルダーにあります。

これで、Scrapyプロジェクト内のDjangoモデルに完全にアクセスできます。

他のヒント

反対のソリューション(Django管理コマンドのScrapyをセットアップ):

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

そして、djangoのsettings.pyで:

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

その後、の代わりに scrapy foo 走る ./manage.py scrapy foo.

upd: :Djangoのオプションの解析をバイパスするためのコードを修正しました。

Scrapy Projectのsettings.pyにdjango_settings_module envを追加します

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

これで、Scrapyプロジェクトでdjangoitemを使用できます。

編集:
あなたはそれを確認する必要があります your_django_project プロジェクト settings.py で利用可能です PYTHONPATH.

Django 1.4の場合、プロジェクトレイアウトが変更されました。 /myproject/settings.pyの代わりに、設定モジュールは/myproject/myproject/settings.pyにあります。

また、Pathの親ディレクトリ(/myProject)をSys.Pathに追加して、正しく機能させました。

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

Django-Dynamic-Scraperをチェックしてください。ScrapySpiderManagerをDjangoサイトに統合します。

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

作成してみませんか __init__.py Scrapy Projectフォルダーにファイルし、に接続します INSTALLED_APPS?私のために働いた。私は単に使用することができました:

piplirs.py

from my_app.models import MyModel

それが役立つことを願っています。

setup-environ 非推奨です。 Django 1.4+の新しいバージョンのScrapyの設定ファイルで以下を実行する必要がある場合があります

def setup_django_env():
    import sys, os, django

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

django.setup()

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

scrapy_settings_module宣言はまだ必要です。

os.environ.setdefault('SCRAPY_SETTINGS_MODULE', 'scrapy_project.settings')
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top