【问题标题】:Use Django's models in a Scrapy project (in the pipeline)在 Scrapy 项目中使用 Django 的模型(在管道中)
【发布时间】:2017-06-13 19:31:14
【问题描述】:

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

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

这是我的问题的症结所在,我想以与运行 python manage.py shell时相同的方式使用我的 django 模型并与之交互> 我会从 myapp.models 导入 Model1。使用查询like seen here.

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

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

提前致谢。

【问题讨论】:

  • 你能解决这个问题吗?
  • 不,我没有。这让我疯狂。我真的很想避免处理原始 SQL。 Django api 非常适合!我可能会研究 sqlalchemy,但如果我没有的话,我宁愿不学习另一个库。你有什么建议或者我可以研究的方法吗?
  • 好的,我以前做过。很快就会写下答案。今天是周末。
  • 期待!谢谢。

标签: python django django-models scrapy scrapy-pipeline


【解决方案1】:

在这里,我创建了一个在 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

您可以在项目中查看模型架构等更多详细信息。

【讨论】:

  • 这正是我想要的!太感谢了。我不敢相信我在网上找不到这个。
  • 如果这可行,那么 Scrapy-DjangoItem 插件的意义何在?这似乎更好,因为我还需要对数据库进行查询以正确更新/保存抓取的项目
  • @Tjorriemorrie 你有没有找到关于 django-items 插件的任何信息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 2011-05-15
相关资源
最近更新 更多