一:webMagic介绍
利用HttpClient与Jsoup可以帮助我们完成简单的或者规模较小的爬虫案例,但是他俩支撑不起企业级爬虫的开发。今天笔者整理了一款船新版本的爬虫框架——WebMagic,它的底层是由HttpClient与Jsoup结合实现的,它可以帮助我们更加方便快捷的开发爬虫。
WebMagic的设计目标是开发模块化。它分为核心和扩展两部分。核心部分是精简模块化的爬虫实现,而扩展部分是一些便捷的实用的功能。WebMagic结构分为DownLoader(下载)、PageProcessor(处理)、Scheduler(管理)、Pipeline(持久化)四大组件,并由Spider将它们彼此组织起来。Spider相当于一个大容器,是webMagic逻辑的核心。
用于数据流转的三个对象
1.request
request是对URL地址的一层封装,一个Request对象一个URL地址。他是Pageprocessor与Downloader交互的载体,也是PageProcessorr控制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处理。
二:入门程序
打开idea,创建maven工程,pom.xml中加入webMagic的依赖,webMagic的依赖分为core与extension。
<dependencies>
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-core</artifactId>
<version>0.7.3</version>
</dependency>
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-extension</artifactId>
<version>0.7.3</version>
</dependency>
</dependencies>
第一个入门程序:我们使用了page对象,代码注释已展示代码含义。
package com.csii.webMagic.test;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
public class JobProcessor implements PageProcessor {
//负责解析页面
public void process(Page page) {
//解析返回的数据page,并且把解析的结果放到ResultItems中
page.putField("div",page.getHtml().css("div.mt h3").all());
}
private Site site = Site.me()
.setCharset("utf8")//设置编码格式
.setTimeOut(10*1000)//设置超时时间 单位毫秒
.setRetryTimes(3*1000) //设置重试的间隔时间 毫秒
.setSleepTime(3)//设置重试次数
;
public Site getSite() {
return site;
}
//main函数
public static void main(String[] args) {
Spider.create(new JobProcessor())
.addUrl("https://wt.jd.com").run();//设置要爬取的页面
}
}
运行了main方法,我们看到了控制台中打印出:
19-08-27 16:46:09,779 INFO us.codecraft.webmagic.Spider(Spider.java:306) ## Spider wt.jd.com started!
19-08-27 16:46:10,465 INFO us.codecraft.webmagic.downloader.HttpClientDownloader(HttpClientDownloader.java:86) ## downloading page success https://wt.jd.com
get page: https://wt.jd.com
div: [<h3 class="title">电话卡流量卡</h3>, <h3 class="title">京东通信</h3>, <h3 class="title">家庭宽带</h3>]
19-08-27 16:46:15,582 INFO us.codecraft.webmagic.Spider(Spider.java:338) ## Spider wt.jd.com closed! 1 pages downloaded.
Process finished with exit code 0
ok,以上我们认识并入门了webMagic,良好的开端是成功的一半,想要将海量数据玩弄于鼓掌吗?快动手创建一个webMagic工程吧。