(3)scrapy中的模块导入

模块的导入

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

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

《(3)scrapy中的模块导入》

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

《(3)scrapy中的模块导入》

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

《(3)scrapy中的模块导入》

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

《(3)scrapy中的模块导入》

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

scrapy的低耦合

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

    原文作者:Fathui
    原文地址: https://www.jianshu.com/p/e7de1881da43
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞