(3)scrapy中的模块导入

模块的导入

在(1)scrapy中的from_crawler中我们讲了当导入模块之后,使用模块的from_crawler方法创建实例的过程,现在让我们来了解一下scrapy中模块是如何导入的。

以调度器scheduler为例,scheduler的导入在engine中

这里的self.settings是经过各层参数覆盖之后的最终参数(详见(2)scrapy中的settings),默认的'SCHEDULER'参数在scrapy的默认参数default_settings中,也就是调度器所在的路径

找到这个路径,可以看到这个类是真实存在的

接着看一下load_object做了什么(在scrapy.utils.misc下)

可以看出,load_object仅仅是调用import_module库将调度器进行导入,然后返回SCHEDULER类而已,其他模块的导入同理

scrapy的低耦合

了解了scrapy导入模块的流程后,就差不多清楚为什么说scrapy的架构是低耦合的了,同样以调度器为例,我们完全可以按照scrapy定义的接口标准,自己编写一个调度器,然后在项目settings模块中覆盖'SCHEDULER'参数,将路径指向我们自定义的调度器类,那么scrapy就会使用我们自定义的调度器模块了(scrapy-redis的原理)

你可能感兴趣的:((3)scrapy中的模块导入)