- 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
- 附录:实例分析
- 列表 + 详情的基本页面组合
- 抓取前端渲染的页面
1.2 总体架构
WebMagic 的结构分为 Downloader
、 PageProcessor
、 Scheduler
、 Pipeline
四大组件,并由 Spider 将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。WebMagic 的设计参考了 Scapy,但是实现方式更 Java 化一些。
而 Spider 则将这几个组件组织起来,让它们可以互相交互,流程化的执行,可以认为 Spider 是一个大的容器,它也是 WebMagic 逻辑的核心。
WebMagic 总体架构图如下:
1.2.1 WebMagic 的四个组件
1.Downloader
Downloader 负责从互联网上下载页面,以便后续处理。WebMagic 默认使用了 Apache HttpClient 作为下载工具。
2.PageProcessor
PageProcessor 负责解析页面,抽取有用信息,以及发现新的链接。WebMagic 使用 Jsoup 作为 HTML 解析工具,并基于其开发了解析 XPath 的工具 Xsoup 。
在这四个组件中, PageProcessor
对于每个站点每个页面都不一样,是需要使用者定制的部分。
3.Scheduler
Scheduler 负责管理待抓取的 URL,以及一些去重的工作。WebMagic 默认提供了 JDK 的内存队列来管理 URL,并用集合来进行去重。也支持使用 Redis 进行分布式管理。
除非项目有一些特殊的分布式需求,否则无需自己定制 Scheduler。
4.Pipeline
Pipeline 负责抽取结果的处理,包括计算、持久化到文件、数据库等。WebMagic 默认提供了“输出到控制台”和“保存到文件”两种结果处理方案。
Pipeline
定义了结果保存的方式,如果你要保存到指定数据库,则需要编写对应的 Pipeline。对于一类需求一般只需编写一个 Pipeline
。
1.2.2 用于数据流转的对象
1. Request
Request
是对 URL 地址的一层封装,一个 Request 对应一个 URL 地址。
它是 PageProcessor 与 Downloader 交互的载体,也是 PageProcessor 控制 Downloader 唯一方式。
除了 URL 本身外,它还包含一个 Key-Value 结构的字段 extra
。你可以在 extra 中保存一些特殊的属性,然后在其他地方读取,以完成不同的功能。例如附加上一个页面的一些信息等。
2. Page
Page
代表了从 Downloader 下载到的一个页面——可能是 HTML,也可能是 JSON 或者其他文本格式的内容。
Page 是 WebMagic 抽取过程的核心对象,它提供一些方法可供抽取、结果保存等。在第四章的例子中,我们会详细介绍它的使用。
3. ResultItems
ResultItems
相当于一个 Map,它保存 PageProcessor 处理的结果,供 Pipeline 使用。它的 API 与 Map 很类似,值得注意的是它有一个字段 skip
,若设置为 true,则不应被 Pipeline 处理。
1.2.3 控制爬虫运转的引擎 - Spider
Spider 是 WebMagic 内部流程的核心。Downloader、PageProcessor、Scheduler、Pipeline 都是 Spider 的一个属性,这些属性是可以自由设置的,通过设置这个属性可以实现不同的功能。Spider 也是 WebMagic 操作的入口,它封装了爬虫的创建、启动、停止、多线程等功能。下面是一个设置各个组件,并且设置多线程和启动的例子。详细的 Spider 设置请看第四章—— 爬虫的配置、启动和终止 。
public static void main(String[] args) {
Spider.create(new GithubRepoPageProcessor())
//从 https://github.com/code4craft 开始抓
.addUrl("https://github.com/code4craft")
//设置 Scheduler,使用 Redis 来管理 URL 队列
.setScheduler(new RedisScheduler("localhost"))
//设置 Pipeline,将结果以 json 方式保存到文件
.addPipeline(new JsonFilePipeline("D:\\data\\webmagic"))
//开启 5 个线程同时执行
.thread(5)
//启动爬虫
.run();
}
1.2.4 快速上手
上面介绍了很多组件,但是其实使用者需要关心的没有那么多,因为大部分模块 WebMagic 已经提供了默认实现。
一般来说,对于编写一个爬虫, PageProcessor
是需要编写的部分,而 Spider
则是创建和控制爬虫的入口。在第四章中,我们会介绍如何通过定制 PageProcessor 来编写一个爬虫,并通过 Spider 来启动。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论