在Scrapy中访问Django模型

34 投票
8 回答
10426 浏览
提问于 2025-04-16 07:34

我可以在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 模型了。

撰写回答