scrapy是通過hashlib算法轉成長度一致的url,然后再通過set集合去重的,有興趣看源碼
去重的中間件在scrapy 的 dupefilters.py文件中:
--> #去重器
RFDupeFilter()
-->有個函數叫
request_seen() #被scrapy/core/scheduler.py調用
這個是調度器
scheduler.py#文件中有個函數叫enqueue_request()的函數 每來一個url就是通過這個函數來執行的
每次執行之前都會調用到 request_seen(request) 這個方法
這個方法就會生成一個指紋,指紋下面的掉用的就比較復雜了,簡單的說就是要去執行 hashlib.sha1() 這個算法來生成一個固定長度的哈兮值
再然后就是在那個去重器中的
self.fingerprints = set()
就是通過上句代碼執行了set集合來去重了