Web Magic 总体架构

摘要:
Spider将这些组件组织起来,以便它们可以相互交互并在流程中执行。可以认为,蜘蛛是一个大型容器,是WebMagic逻辑的核心。WebMagic的总体架构如下:1.2.1 WebMagic四个组件1.DownloaderDownloader负责从Internet下载页面以进行后续处理。WebMagic默认使用Apache HttpClient作为下载工具。WebMagic默认提供JDK内存队列来管理URL并使用集合来删除重复项。WebMagic默认提供两种结果处理方案:“输出到控制台”和“保存到文件”。

1.2 总体架构

WebMagic的结构分为DownloaderPageProcessorSchedulerPipeline四大组件,并由Spider将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。WebMagic的设计参考了Scapy,但是实现方式更Java化一些。

而Spider则将这几个组件组织起来,让它们可以互相交互,流程化的执行,可以认为Spider是一个大的容器,它也是WebMagic逻辑的核心。

WebMagic总体架构图如下:

image

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设置请看第四章——爬虫的配置、启动和终止

 1 public static void main(String[] args) {
 2     Spider.create(new GithubRepoPageProcessor())
 3             //从https://github.com/code4craft开始抓    
 4             .addUrl("https://github.com/code4craft")
 5             //设置Scheduler,使用Redis来管理URL队列
 6             .setScheduler(new RedisScheduler("localhost"))
 7             //设置Pipeline,将结果以json方式保存到文件
 8             .addPipeline(new JsonFilePipeline("D:\data\webmagic"))
 9             //开启5个线程同时执行
10             .thread(5)
11             //启动爬虫
12             .run();
13 }

1.2.4 快速上手

上面介绍了很多组件,但是其实使用者需要关心的没有那么多,因为大部分模块WebMagic已经提供了默认实现。

一般来说,对于编写一个爬虫,PageProcessor是需要编写的部分,而Spider则是创建和控制爬虫的入口。在第四章中,我们会介绍如何通过定制PageProcessor来编写一个爬虫,并通过Spider来启动。

免责声明:文章转载自《Web Magic 总体架构》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 换肤功能的实现(Apk插件方式)docker 安装jumpserver下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Django中CSS加载background url('')问题

Django中CSS加载background url('')问题 在django中, 默认CSS中如果有 background url('images/a.jpg') 这类的属性,会被django当成URL来解析 这样会造成找不到该文件的问题。 所以为了解决这个问题,首先需要配置setting.py, 配置STATICFILES_DIRS STATIC...

怎样更改wordpress登陆 URL防止恶意注册

WP 默认的登陆 URL 是 wp-login.php或wp-admin.php,许多spamer会根据这些footprint来收集可注册的wordpress站点,然后你的站内就多出许多垃圾评论。如果你不想成为其中的一员,那就改改登录url吧 可以通过在 .htaccess 添加如下代码把登陆 URL 改成 login: RewriteRule ^logi...

Google图片下载利器Universal Maps Downloader的辅助工具(元宝)

最近做项目要用到卫片做底图,手头没有好的图片做多级缩放,只好借用“网络资源”。用过很多工具,个人觉得还是Universal Maps Downloader最好! 以下是Universal Maps Downloader的简单情况 UniversalMapsDownloader是一款可以从GoogleMaps,YahooMaps,MicrosoftMaps上...

学习pycharm----自动化接口

1.pycharm中安装requests a:打开pycharm软件,点击file-setting b:在目录下点击Project Interpreter,在目录的右侧,点击右上方的+ c: 在输入框中输入requests,点击安装(提示sucessful时,表名安装第三方库成功) ps:在pycharm中安装其他第三方库是一样的步骤 2.使用pychar...

字体图标的用法总结

1:图标有哪些格式,什么是字体图标? 传统图标采用图片格式,有bmp,jpg,gif,png等文件格式;字体图标采用 svg 矢量图片格式 图标全部采用字体格式 可以使用color,font-size...,改变图标的颜色,大小等样式 2:字体图标实现方式分为哪几类? font+html 实现字体图标(又称:Unicode引用) font+css 实...

【转】越狱的 iPhone、iPad 通过网站实现一键安装 ipa 格式的 APP 应用

1、已经越狱的 iPhone、iPad 设备,当通过其自带的 safari 浏览器访问 ipa 应用下载网站时,利用 itms-services 协议,可以一键安装 ipa 文件的 iOS 应用,例如: <a href="http://t.zoukankan.com/itms-services://?action=download-manifest&...