前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scheduler三种去重实现方法

Scheduler三种去重实现方法

作者头像
名字是乱打的
发布2022-05-13 10:16:57
4070
发布2022-05-13 10:16:57
举报
文章被收录于专栏:软件工程
爬取重复的页面是没有任何意义的。

Scheduler(URL管理)最基本的功能是实现对已经爬取的URL进行标示。 可以实现URL的增量去重。 目前scheduler主要有三种实现方式:   1)内存队列QueueScheduler   2)文件队列FileCacheQueueScheduler   3)Redis队列RedisScheduler

1 内存队列

使用setScheduler来设置Scheduler

代码语言:javascript
复制
     public static void main(String[] args) {
        Spider.create( new MyProcessor() )
                .addUrl("https://blog.csdn.net")
                .setScheduler(new QueueScheduler()) 
               .run();
    }
2 文件队列

使用文件保存抓取URL,可以在关闭程序并下次启动时,从之前抓取到的URL继续抓取 (1)创建文件夹E:\scheduler (2)修改代码

代码语言:javascript
复制
     public static void main(String[] args) {
        Spider.create( new MyProcessor() )
                .addUrl("https://blog.csdn.net")
                //.setScheduler(new QueueScheduler())//设置内存队列                
                .setScheduler(new FileCacheQueueScheduler("E:\\scheduler"))//设置文件队列
                .run();
    }

运行后文件夹E:\scheduler会产生两个文件blog.csdn.net.urls.txt和blog.csdn.net.cursor.txt

3 Redis队列

使用Redis保存抓取队列,可进行多台机器同时合作抓取 (1)运行redis服务端 (2)修改代码

代码语言:javascript
复制
     public static void main(String[] args) {
        Spider.create( new MyProcessor() )
                .addUrl("https://blog.csdn.net")
                //.setScheduler(new QueueScheduler())//设置内存队列
                //.setScheduler(new FileCacheQueueScheduler("E:\\scheduler"))//设置文件队列
                .setScheduler(new RedisScheduler("127.0.0.1"))//设置Redis队列
                .run();
    }

RedisScheduler是使用Redis的set进行去重, 其他的Scheduler默认都使用HashSetDuplicateRemover来进行去重。

三种去重方式

去重就有三种实现方式,那有什么不同呢?

  • HashSet 使用java中的HashSet不能重复的特点去重。优点是容易理解。使用方便。 缺点:占用内存大,性能较低。
  • Redis去重 使用Redis的set进行去重。优点是速度快(Redis本身速度就很快),而且去重不会占用爬虫服务器的资源,可以处理更大数据量的数据爬取。 缺点:需要准备Redis服务器,增加开发和使用成本。
  • 布隆过滤器(BloomFilter) 使用布隆过滤器也可以实现去重。优点是占用的内存要比使用HashSet要小的多,也适合大量数据的去重操作。 缺点:有误判的可能。没有重复可能会判定重复,但是重复数据一定会判定重复。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 爬取重复的页面是没有任何意义的。
    • 1 内存队列
    • 2 文件队列
    • 3 Redis队列
      • 三种去重方式
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档