3

以前有人问过这个问题,但总是出现的答案是使用DjangoItem。但是它在它的github上声明:

对于编写密集型应用程序(例如网络爬虫)通常不是一个好的选择......可能无法很好地扩展

这是我的问题的症结所在,我想以与运行python manage.py shellfrom myapp.models import Model1相同的方式使用我的 django 模型并与之交互。使用这里看到的查询。

我尝试过相对导入并将整个scrapy项目移动到我的django应用程序中,但都无济于事。

我应该把我的scrapy项目移到哪里才能让它工作?如何重新创建/使用scrapy管道内shell中可用的所有方法?

提前致谢。

4

1 回答 1

9

在这里,我创建了一个在 django 中使用 scrapy 的示例项目。并在其中一个管道中使用 Django 模型和 ORM。

https://github.com/bipul21/scrapy_django

目录结构从您的 django 项目开始。在这种情况下,项目名称是django_project。进入基础项目后,您将在此处创建您的 scrapy 项目,即scrapy_project

在您的scrapy项目设置中添加以下行以设置初始化django

import os
import sys
import django

sys.path.append(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), ".."))
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings'

django.setup()

在管道中,我对问题模型进行了简单查询

from questions.models import Questions

class ScrapyProjectPipeline(object):
    def process_item(self, item, spider):
        try:
            question = Questions.objects.get(identifier=item["identifier"])
            print "Question already exist"
            return item
        except Questions.DoesNotExist:
            pass

        question = Questions()
        question.identifier = item["identifier"]
        question.title = item["title"]
        question.url = item["url"]
        question.save()
        return item

您可以签入项目以获取更多详细信息,例如模型架构。

于 2017-02-07T13:17:34.303 回答