scrapy 源码解析 (四):启动流程源码分析(四) Scheduler调度器

时间:2020-05-21
本文章向大家介绍scrapy 源码解析 (四):启动流程源码分析(四) Scheduler调度器,主要包括scrapy 源码解析 (四):启动流程源码分析(四) Scheduler调度器使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Scheduler调度器

对ExecutionEngine执行引擎篇出现的Scheduler进行展开。Scheduler用于控制Request对象的存储和获取,并提供了过滤重复Request的功能。

Scheduler对象

scheduler对象是通过类的from_cralwer方法生成的。
scrapy/core/scheduler.py#Scheduler:

from_crawler(cls, crawler):
        settings = crawler.settings
        dupefilter_cls = load_object(settings['DUPEFILTER_CLASS'])
        dupefilter = dupefilter_cls.from_settings(settings)
        pqclass = load_object(settings['SCHEDULER_PRIORITY_QUEUE'])
        dqclass = load_object(settings['SCHEDULER_DISK_QUEUE'])
        mqclass = load_object(settings['SCHEDULER_MEMORY_QUEUE'])
        logunser = settings.getbool('LOG_UNSERIALIZABLE_REQUESTS', settings.getbool('SCHEDULER_DEBUG'))
        return cls(dupefilter, jobdir=job_dir(settings), logunser=logunser,
                   stats=crawler.stats, pqclass=pqclass, dqclass=dqclass, mqclass=mqclass)

创建了4个对象,分别是dupefilter,pqclass,dqclass,mqclass。

dupefilter过滤器(url去重)


DUPEFILTER_CLASS = ‘scrapy.dupefilters.RFPDupeFilter’
这个类的含义是"Request Fingerprint duplicates filter",请求指纹副本过滤。也就是对每个request请求做一个指纹,保证相同的请求有相同的指纹。对重复的请求进行过滤。
包含查询字符串、cookies字段的相同url也会被去重。

pqclass优先级队列


SCHEDULER_PRIORITY_QUEUE = ‘queuelib.PriorityQueue’
这是一个优先级队列,使用的是开源的第三方queuelib.它的作用就是对request请求按优先级进行排序,这样我们可以对不同重要性的URL指定优先级(通过设置Request的priority属性)。
优先级是一个整数,虽然queuelib使用小的数做为高优化级,但是由于scheduler入队列时取了负值,所以对于我们来说,数值越大优先级越高。

dqclass支持序列化的后进先出的磁盘队列


SCHEDULER_DISK_QUEUE = ‘scrapy.squeues.PickleLifoDiskQueue’
这是一个支持序列化的后进先出的磁盘队列。主要用来帮助我们在停止爬虫后可以接着上一次继续开始爬虫。

mqclass后进先出的内存队列


SCHEDULER_MEMORY_QUEUE = ‘scrapy.squeues.LifoMemoryQueue’
从名字上看,是后进先出的内存队列。这个队列是为了使用2中的队列而存在的,不必单独分析。
————————————————
版权声明:本文为CSDN博主「csdn_yym」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/csdn_yym/java/article/details/85576173

原文地址:https://www.cnblogs.com/qiu-hua/p/12932254.html