1. 数据库
将访问过的url保存到数据库中,每次爬取时搜索。
2. URL -> HashSet
使用java中的HashSet不能重复的特点去重。优点是容易理解。使用方便。webmagic 默认采用的是这种方式
缺点:占用内存大,性能较低。
3. md5(URL) -> HashSet
url经过md5等方法哈希后保存到set中,scrapy采用的是这种方式
4. bitmap url + HashSet
使用bitmap方法,将访问过的url通过hash函数映射到某一位(bit)
缺点:冲突会非常高
5. Redis去重
使用Redis的set进行去重。优点是速度快(Redis本身速度就快),而且不会占用爬虫服务器的资源,可以处理更大数据量的数据爬取。
缺点:需要准备Redis服务器,增加开发和使用成本。
6. 布隆过滤器(BloomFilter)
使用布隆过滤器也可以实现去重。优点是占用的内存要比使用HashSet要小的多,也适合大量数据的去重操作。
缺点:有误判的可能。没有重复可能会判定重复,但是重复数据一定会判定重复。