zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

爬虫scrapy 日记 87
2023-09-14 09:10:04 时间

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

 

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