[英]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.