从Django调用Scrapy Spider

7

我有一个在同一个工作空间中包含Django和Scrapy文件夹的项目:

my_project/
    django_project/
        django_project/
            settings.py
        app1/
        app2/
        manage.py
        ...
    scrapy_project/
        scrapy_project/
            settings.py
        scrapy.cfg
        ...

我已将Scrapy与我的Django App1模型连接,因此每次运行蜘蛛时,它都会将收集的数据存储在我的PostgreSQL数据库中。

这就是我的Scrapy项目如何访问Django模型的方式。

#in my_project/scrapy_project/scrapy_project/settings.py
import sys
import os
import django

sys.path.append('/../../django_project')
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings'
django.setup()

当我从命令行调用蜘蛛时,一切都很顺利。但是当我想要从Django视图或Django中的Celery任务等脚本中调用蜘蛛时,出现了问题:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
process = CrawlerProcess(get_project_settings())
process.crawl('spider_name')
process.start()

我遇到了一个错误:
KeyError: 'Spider not found: spider_name'

我觉得我应该告诉Django Scrapy的位置(就像我在Scrapy设置中所做的那样),但我不知道该如何做。 说实话,我甚至不确定为这个项目设计文件夹结构的方式是否正确。


我猜测你的 scrapy_project 不在 PATH 中。 - Andrey Shipilov
1
scrapy_projectPATH 上是否足够?我认为 scrapy_project 必须是当前工作目录(但我只是简单地阅读了代码)。 - aufziehvogel
我通过在django_project/目录中放置到scrapy.cfg的符号链接来解决了这个问题。 - Andrii Tykhonov
1个回答

0

按照Scrapy文档的示例进行操作:

from my_projec.scrapy_project.spiders import MySpider
...
process.crawl(MySpider)

这��导入文件但不导入类,你可能想在爬取语句中使用MySpider.SpiderClassName。 - Ali H. Kudeir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接