WebMagic
文章目录
前言
继续看视频学习ing~
视频地址
一、WebMagic
1.1简介
核心部分是一个精简的, 模块化的爬虫实现, 而扩展部分则包括一些遍历的, 使用性的功能
设计目标是尽量的模块化, 并体现爬虫的功能特点, 这部分提供非常简单, 灵活的API, 在基本不改变开发模式的情况下, 编写一个爬虫
扩展部分提供一些便捷的功能, 例如注解模式编写爬虫等, 同时内置了一些常用的组件, 便于爬虫开发
1.2架构
WebMagic的结构分为Downloader、PageProcessor、Scheduler、Pipeline四大组件,并由Spider将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。WebMagic的设计参考了Scapy,但是实现方式更Java化一些。
而Spider则将这几个组件组织起来,让它们可以互相交互,流程化的执行,可以认为Spider是一个大的容器,它也是WebMagic逻辑的核心。
WebMagic总体架构图如下:
1.2.1WebMagic的四个组件
- Downloader
Downloader负责从互联网上下载页面,以便后续处理。WebMagic默认使用了Apache HttpClient作为下载工具。 - PageProcessor
PageProcessor负责解析页面,抽取有用信息,以及发现新的链接。WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup。PageProcessor对于每个站点每个页面都不一样,是需要使用者定制的部分。 - Scheduler
Scheduler负责管理待抓取的URL,以及一些去重的工作。WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重。也支持使用Redis进行分布式管理。 - Pipeline
Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等。WebMagic默认提供了“输出到控制台”和“保存到文件”两种结果处理方案。Pipeline定义了结果保存的方式,如果你要保存到指定数据库,则需要编写对应的Pipeline。对于一类需求一般只需编写一个Pipeline。
1.2.2用于数据流传的对象
- Request
Request是对URL地址的一层封装,一个Request对应一个URL地址。
它是PageProcessor与Downloader交互的载体,也是PageProcessor控制Downloader唯一方式。
除了URL本身外,它还包含一个Key-Value结构的字段extra。你可以在extra中保存一些特殊的属性,然后在其他地方读取,以完成不同的功能。例如附加上一个页面的一些信息等。 - Page
Page代表了从Downloader下载到的一个页面——可能是HTML,也可能是JSON或者其他文本格式的内容。
Page是WebMagic抽取过程的核心对象,它提供一些方法可供抽取、结果保存等。 - ResultItems
ResultItems相当于一个Map,它保存PageProcessor处理的结果,供Pipeline使用。它的API与Map很类似,值得注意的是它
一个字段skip,若设置为true,则不应被Pipeline处理。
二、WebMagic 功能
提示:对于JSON格式,可以用JsonPath进行解析
2.1实现PageProcessor
2.1.1 抽取元素 Selectable
- Xpath
- Css选择器
- 正则表达式
public class JobProcessor implements PageProcessor {
// 解析页面
public void process(Page page) {
// 解析返回的数据page, 并且把解析的结果放到ResultItems中
// css表达式
page.putField("title", page.getHtml().css("title"))