返回介绍

6.2 使用和定制 Scheduler

发布于 2019-11-28 05:27:15 字数 1860 浏览 1196 评论 0 收藏 0

Scheduler 是 WebMagic 中进行 URL 管理的组件。一般来说,Scheduler 包括两个作用:

  1. 对待抓取的 URL 队列进行管理。
  2. 对已抓取的 URL 进行去重。

WebMagic 内置了几个常用的 Scheduler。如果你只是在本地执行规模比较小的爬虫,那么基本无需定制 Scheduler,但是了解一下已经提供的几个 Scheduler 还是有意义的。

说明备注
DuplicateRemovedScheduler抽象基类,提供一些模板方法继承它可以实现自己的功能
QueueScheduler使用内存队列保存待抓取 URL 
PriorityScheduler使用带有优先级的内存队列保存待抓取 URL耗费内存较 QueueScheduler 更大,但是当设置了 request.priority 之后,只能使用 PriorityScheduler 才可使优先级生效
FileCacheQueueScheduler使用文件保存抓取 URL,可以在关闭程序并下次启动时,从之前抓取到的 URL 继续抓取需指定路径,会建立.urls.txt 和.cursor.txt 两个文件
RedisScheduler使用 Redis 保存抓取队列,可进行多台机器同时合作抓取需要安装并启动 redis

在 0.5.1 版本里,我对 Scheduler 的内部实现进行了重构,去重部分被单独抽象成了一个接口: DuplicateRemover ,从而可以为同一个 Scheduler 选择不同的去重方式,以适应不同的需要,目前提供了两种去重方式。

说明
HashSetDuplicateRemover使用 HashSet 来进行去重,占用内存较大
BloomFilterDuplicateRemover使用 BloomFilter 来进行去重,占用内存较小,但是可能漏抓页面

所有默认的 Scheduler 都使用 HashSetDuplicateRemover 来进行去重,(除开 RedisScheduler 是使用 Redis 的 set 进行去重)。如果你的 URL 较多,使用 HashSetDuplicateRemover 会比较占用内存,所以也可以尝试以下 BloomFilterDuplicateRemover1 ,使用方式:

spider.setScheduler(new QueueScheduler()
.setDuplicateRemover(new BloomFilterDuplicateRemover(10000000)) //10000000 是估计的页面数量
)
1. 0.6.0 版本后,如果使用 BloomFilterDuplicateRemover,需要单独引入 Guava 依赖包。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文