1. 程式人生 > >scrapy的去重原理

scrapy的去重原理

對於每一個url的請求,排程器都會根據請求得相關資訊加密(類似於MD5)得到一個指紋資訊,並且將指紋資訊和自己維護的一個集合中的url指紋資訊進行比對,如果集合中已經存在這個指紋,就代表出現重複請求,就不再將這個Request放入佇列中。如果集合中沒有存在這個指紋,就將這個Request物件放入佇列中,等待被排程。
 

一般在request請求的引數中加入dont_filter=False可以關閉去重,方便重複爬取同一網站下不同頁面的資訊。也可以通過修改爬取規則如start_url等或自定義爬取url作為請求的引數以避免不必要的去重。

 

至於資料去重我一般有兩種方法:自己利用python的集合型別在pipeline中加入去重的功能,是最簡單無腦的方法;另外是在入庫時進行去重,例如在Mysql中設定唯一索引或者在Redis中使用集合等等,這樣的話對爬蟲爬取效率的影響會比較小,但會增加資料庫的負擔。