访问Scrapy内部的django模型

imn*_*mns 33 python django django-models scrapy

是否可以在Scrapy管道中访问我的django模型,以便我可以将我的已删除数据直接保存到我的模型中?

我已经看过这个,但我真的不知道怎么设置它?

imn*_*mns 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/')
Run Code Online (Sandbox Code Playgroud)

注意:上面的路径是你的django项目文件夹,而不是settings.py文件.

现在,您可以完全访问scrapy项目中的django模型.

  • 只是一个小小的音符.使用Django 1.4中的新项目布局,路径应该是`setup_django_env('/ path/to/django/project/project /')` (4认同)
  • 在当前的django版本`来自django.core.management import setup_environ`将无法正常工作......那么如何做到这一点 (2认同)

Mik*_*bov 20

相反的解决方案(在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:])
Run Code Online (Sandbox Code Playgroud)

在django的settings.py中:

import os
os.environ['SCRAPY_SETTINGS_MODULE'] = 'scrapy_project.settings'
Run Code Online (Sandbox Code Playgroud)

然后而不是scrapy foo运行./manage.py scrapy foo.

UPD:修复代码以绕过django的选项解析.


Jet*_*Guo 14

在scrapy项目的settings.py中添加DJANGO_SETTINGS_MODULE env

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'your_django_project.settings'
Run Code Online (Sandbox Code Playgroud)

现在您可以在scrapy项目中使用DjangoItem.

编辑:
您必须确保your_django_project项目settings.py可用PYTHONPATH.


归档时间:

查看次数:

9637 次

最近记录:

7 年 前