爬虫日记(87):Scrapy的RFPDupeFilter类(一)

Posted caimouse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫日记(87):Scrapy的RFPDupeFilter类(一)相关的知识,希望对你有一定的参考价值。

前面已经分析了调度器的入队代码,在这里会调用RFPDupeFilter类的功能,用来判断两个下载的url请求是否相同,如果相同,并且参数设置为去重时,就会不再下载,这样避免了重复下载同样的url页面。接着下来我们来分析怎么样实现url相同的判断,是否直接采用字符串相同的判断?还是有什么方法进行判断呢?要解决这些疑问,我们需要把这些代码分析一轮,才能搞明白为什么这样设计,以及这样实现有什么优点。

 

在开始分析之前,我们先来学习一下python怎么样方便记录一个对象已经查看过。由于一个对象有很多属性,但是唯有一个ID是没有办法的,只要保存这个ID值,就可以判断这个对象是否处理过,这是一种方案。不过在python库里提供了一种更加方便的方案,可以采用弱引用来关注一个对象是否存在,意思就是说这个对象保存在这个容器里,只保证它存在时的有效性,如果对象删除了,在这个容器里也同步删除。这样就可以省了删除的管理操作,不需要增加引用计数。这时需要使用weakref库,这个库实现了一个对象WeakKeyDictionary,

以上是关于爬虫日记(87):Scrapy的RFPDupeFilter类(一)的主要内容,如果未能解决你的问题,请参考以下文章

爬虫日记(63):Scrapy的设置参数-日志

爬虫日记(73):Scrapy程序运行入口点分析

爬虫日记(75):Scrapy的Settings源码分析

爬虫日记(74):Scrapy项目配置参数源码分析(二)

爬虫日记(76):Scrapy的命令行源码分析二

爬虫日记(85):Scrapy的ExecutionEngine类