在Scrapy中访问Django模型
我可以在Scrapy的处理流程中访问我的Django模型吗?这样我就可以直接把抓取到的数据保存到我的模型里。
我看过这个链接,但是我不太明白怎么设置。
8 个回答
16
在你的 Scrapy 项目的 settings.py 文件中添加 DJANGO_SETTINGS_MODULE 环境变量。
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'your_django_project.settings'
现在你可以在 Scrapy 项目中使用 DjangoItem 了。
补充说明:
你需要确保 your_django_project
这个项目的 settings.py
文件在 PYTHONPATH
中可用。
21
相反的解决方案是:在 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'
这样,你就可以用 ./manage.py scrapy foo
来代替 scrapy foo
了。
更新:修正了代码,以绕过 Django 的选项解析。
26
如果还有其他人遇到同样的问题,下面是我解决的方法。
我在我的 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/')
注意:上面的路径是指你的 django 项目文件夹,而不是 settings.py 文件。
现在你可以在 scrapy 项目中完全访问你的 django 模型了。