繁体   English   中英

从 Django 项目中的 Scrapy 获取蜘蛛列表

[英]Get spider list from Scrapy in Django Project

我正在按照这个答案在 Django 内的 Scrapy 项目中获取蜘蛛列表,所以这就是结构的样子。

my_app/
-- apps/  # django apps folder
   -- crawler/ 
      -- __init__.py
      -- admin.py
      -- apps.py
      -- views.py <~ here is where the code below located
      -- etc..
-- my_app/  # django project folder
   -- __init__.py
   -- asgi.py
   -- settings.py
   -- etc..
-- scraper_app/ # scrapy dir
   -- scraper_app/ # scrapy project folder
      -- spiders/
         -- abc_spider.py
      -- __init__.py
      -- middlewares.py
      -- pipelines.py
      -- settings.py
      -- etc..
   -- scrapy.cfg
-- manage.py
-- scrapyd.conf
-- setup.py
-- etc..

这是显示可用蜘蛛列表的代码,当我在scrapy shell上运行它时,它总是返回一个空字符串,当我尝试从views.py app 中运行它时,它总是返回一个空字符串。

project_settings = project.get_project_settings()
spider_loader = spiderloader.SpiderLoader.from_settings(project_settings)
spiders = spider_loader.list()

所以我的问题是,如果可用的话,如何使用 Django 或 Scrapy 方式使这些脚本在 django 项目上工作? 谢谢

编辑我刚刚意识到,当我尝试从 scrapy shell 中的project.get_project_settings()获取值时,它会返回

'SPIDER_MODULES': ['scraper_app.spiders']

但是当我尝试从 django 运行它时, SPIDER_MODULES返回一个空列表

您应该将您的刮刀与 Django 集成。 例如在 Django settings.py

import os
import sys
    
# DJANGO INTEGRATION
    
sys.path.append(os.path.dirname(os.path.abspath('.')))
os.environ['DJANGO_SETTINGS_MODULE'] = '<scrapper>.settings'

我知道问这个问题已经太久了,但我终于找到了对我来说最好的答案和最干净的方法,而不使用os模块。

from scrapy.utils import project
from scrapy import spiderloader

project_settings = project.get_project_settings()
project_settings.set('SPIDER_MODULES', ['path.to.scrapy.spiders'])
project_settings.set('NEWSPIDER_MODULE', 'path.to.scrapy.spiders')
spider_loader = spiderloader.SpiderLoader.from_settings(project_settings)
spiders = spider_loader.list()

所以在我的解决方案中,我只需要重新分配/替换设置 object 属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM