scrapy源码分析_初始化及settings

本文详细解析了Scrapy爬虫的初始化流程,从CrawlerProcess的启动到Spider的加载,再到MiddlewareManager的初始化,深入探讨了settings配置的加载顺序与优先级。

研究背景

我在开发scrapy爬虫的时候,想让scrpy启动的时候直接指向一个配置文件,
即,我开启的时候用下面语句,则爬虫服务会加载上mysettings.py中的内容,这个内容可能会写
pipline,mysql路径之类的,方便不同的环境,也方便不同的 spider(指单个爬虫任务)

scrapy crawl TestMReview  -a settingpath=/home/abc/conf/mysettings.py

所以想通过了解 scrapy开启进程时的初始化,顺序是怎样的 (网上没有搜到,也有可能是我的思路不对)

Crawler的初始化及动作

下面是按启动顺序的逻辑,

0,关于execute动作

最先是把settings给加进来.
site-packages\scrapy\cmdline.py中的 settings = get_project_settings() 这里首先会取site-packages\scrapy\settings\default_settings.py中的配置,然后取项目的settings加进来

customers_settings在这里没有处理,后续会在 crawler(不是CrawlerProcess)的init中加进来

1,CrawlerProcess的初始化

入口:cmd.crawler_process = CrawlerProcess(settings)

site-packages\scrapy\cmdline.py执行cmd.crawler_process = CrawlerProcess(settings),这是一些初始化的动作.
CrawlerRunner初始化:
CrawlerRunner,会初始化一些内容 如scrapy.spiderloader.SpiderLoader
-> SpiderLoader中的init,中self._load_all_spiders()
-> 加载class TestMReview(RedisSpider)中的成员,如custom_settings,name,allowed_domains中关键内容,
-> 加载的是type,如<class ‘wtest.spiders.TestMDetail.TestMDetail’>不是spider的init
-> 上面的spider各种type,会在spiderloader中存起来

里面有些小utils类,简单记下
from scrapy.utils.misc import load_object中 loader_cls = load_object(cls_path)可以根据路径加载cls,如 load_object(‘scrapy.spiderloader.SpiderLoader’)
class ISpiderLoader(Interface) 如果是接口,可以@implementer(ISpiderLoader)
copy.deepcopy(self) copy一个对象 import copy
misc.py中的 def walk_modules(path)会把目录上的所有module给加载到一个list,

2,CrawlerProcess中Crawler的init

入口:s

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值