Java爬虫框架——WebMagic入门

一: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工程吧。

发布了22 篇原创文章 · 获赞 21 · 访问量 2087

猜你喜欢

转载自blog.csdn.net/weixin_41532316/article/details/100077560