python - 在 Django 项目中从 Scrapy 获取蜘蛛列表

我正在关注 this回答在我的 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 上运行它时,但是当我尝试从 django 应用程序运行它时它总是返回一个空字符串views.py,爬虫应用。

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 返回一个空列表

最佳答案

我知道我问这个问题已经太久了,但我终于找到了最适合我的答案和最干净的方法,没有使用 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()

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

https://stackoverflow.com/questions/62655732/

相关文章:

html - 如何禁用 Angular 匹配

react-native - 当应用程序已经安装时,如何从 React Native 中的实际应用程

testing - 在 Cypress 中运行测试的所有断言

c++ - 为什么 glBufferSubData 很慢?

node.js - 如何在服务器端渲染中使用 Mongodb

amazon-web-services - 使用 bitbucket codestar 连接手动触发

python - 如何使用环境变量设置 boto3 连接超时和读取超时?

c# - CreatedAtAction 结果为 "No route matches the sup

node.js - NodeMailer - G-Suite - 服务账户 - 以群组邮件形式发送

python-3.x - Python中存在数值数据时如何解决TypeError : 'No Num