- 1. WebMagic 概览
- 1.1 设计思想
- 1.2 总体架构
- 1.3 项目组成
- 2. 快速开始
- 2.1 使用Maven
- 2.2 不使用Maven
- 2.3 第一个爬虫项目
- 3. 下载和编译源码
- 3.1 下载源码
- 3.2 导入项目
- 3.3 编译和执行源码
- 4. 编写基本的爬虫
- 4.1 实现 PageProcessor
- 4.2 使用 Selectable 抽取元素
- 4.3 使用Pipeline保存结果
- 4.4 爬虫的配置、启动和终止
- 4.5 Jsoup与Xsoup
- 4.6 爬虫的监控
- 4.7 配置代理
- 4.8 处理非 HTTP GET 请求
- 5. 使用注解编写爬虫
- 5.1 编写Model类
- 5.2 TargetUrl与HelpUrl
- 5.3 使用ExtractBy进行抽取
- 5.4 在类上使用ExtractBy
- 5.5 结果的类型转换
- 5.6 一个完整的流程
- 5.7 AfterExtractor
- 6. 组件的使用和定制
- 6.1 使用和定制 Pipeline
- 6.2 使用和定制 Scheduler
- 6.3 使用和定制 Downloader
- 附录:实例分析
- 列表 + 详情的基本页面组合
- 抓取前端渲染的页面
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
6.2 使用和定制 Scheduler
Scheduler 是 WebMagic 中进行 URL 管理的组件。一般来说,Scheduler 包括两个作用:
- 对待抓取的 URL 队列进行管理。
- 对已抓取的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论