我正在关注 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/
相关文章:
react-native - 当应用程序已经安装时,如何从 React Native 中的实际应用程
testing - 在 Cypress 中运行测试的所有断言
node.js - 如何在服务器端渲染中使用 Mongodb
amazon-web-services - 使用 bitbucket codestar 连接手动触发
python - 如何使用环境变量设置 boto3 连接超时和读取超时?
c# - CreatedAtAction 结果为 "No route matches the sup