Scrapyパイプライン内のdjangoモデルにアクセスして、スクレイピングされたデータをモデルに直接保存することはできますか?
私はこれを見ましたが、私はそれを設定する方法を本当に理解していませんか?
Scrapyパイプライン内のdjangoモデルにアクセスして、スクレイピングされたデータをモデルに直接保存することはできますか?
私はこれを見ましたが、私はそれを設定する方法を本当に理解していませんか?
他の誰かが同じ問題を抱えているなら、これが私がそれを解決した方法です。
これを私のscrapysettings.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のオプション解析をバイパスするようにコードを修正しました。
スクレイププロジェクトのsettings.pyにDJANGO_SETTINGS_MODULEenvを追加します
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にあります。
また、パスの親ディレクトリ(/ 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をチェックしてください。これは、ScrapyスパイダーマネージャーをDjangoサイトに統合します。
__init__.py
かすれたプロジェクトフォルダにファイルを作成して接続してみませんINSTALLED_APPS
か?私のために働いた。私は簡単に使用することができました:
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')