首页
登录 | 注册

WebMagic简明教程(一)

WebMagic简明教程(一)

前言

做项目需要爬取一些数据,不想用Python,就尝试了下webmagic这个爬虫框架,总的来说上手还是比较简单的,这里来总结一下.

webmagic是一个简单灵活的Java爬虫框架,如果你熟悉Java而且不想用Python写爬虫,那么webmagic是一个不错的选择.

实战

日常前戏

  1. 首先呢,咱们来先把jar包下载下来:https://github.com/code4craft/webmagic/releases/tag/WebMagic-0.7.2
    或者到我的百度云下载:http://pan.baidu.com/s/1ge6u4cN
  2. 将jar包倒入工程中,这步应该都没什么问题吧QAQ(如果有问题请私信我或者留言,这里就不过多说了)

爬取网站源码

好了,终于来到了爬取阶段,以爬取题库网为例:

ok,上代码:

package com.xiaokangchen.spider.service;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;

/*1.实现PageProcessor接口*/
public class QuesPageProcess implements PageProcessor{
    /*2.设置抓取网站的相关配置*/    
    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000).setTimeOut(10000);

    @Override
    public Site getSite() {
        // TODO Auto-generated method stub
        /*3.返回site*/    
        return site;
    }

    /*5.爬取逻辑*/
    @Override
    public void process(Page page) {
        // TODO Auto-generated method stub
        page.putField("html", page.getHtml());
        String pageHtml = page.getResultItems().get("html").toString();
        System.err.println(pageHtml);
    }

    /*4.爬取*/
    public static void main(String[] args) {
        /*添加爬取的url链接,开启5个线程爬取*/
        Spider spider = Spider.create(new QuesPageProcess())
        .addUrl("http://www.tiku.com/testPaper.html?sct=0&cn=%E6%95%B0%E5%AD%A6&st=2&cid=500004&bid=800009&vid=800005&uid=800003&cptid=700005&kid=700124&qtid=600050&difficulty=&sort=0")
        .thread(5);
        /*爬虫启动*/
        spider.run();
    }
}

1. 首先我们需要实现PageProcessor接口,实现getSite()方法和process()方法.
2. 设置抓取的相关的配置Site,比如重试次数、抓取间隔等。如果出现看不懂、记不住等疑难杂症,直接先设置成和我的一样就可以了,等以后写的多了自然懂了(逃
3. 把刚刚设置的site返回.
4. 在main()方法中调用Spider的一个静态方法static Spider create(PageProcessor pageProcessor)方法来创建一条爬虫,并且添加Url链接,开启五个线程,最后用run()方法启动.

这里还可以设置下载调度器(Scheduler)像FileCacheQueueScheduler缓存爬取到的url和已经爬取的位置来实现程序中断后继续从当前位置爬取,也可以设置RedisScheduler使用Redis来实现多机器分布式爬取.

至于为什么run()方法单独用spider去调用,以及为啥还搞个Spider spider = ,不直接写

Spider.create(new QuesPageProcess())
        .addUrl("http://www.tiku.com/testPaper.html?sct=0&cn=%E6%95%B0%E5%AD%A6&st=2&cid=500004&bid=800009&vid=800005&uid=800003&cptid=700005&kid=700124&qtid=600050&difficulty=&sort=0")
        .thread(5).run();

因为我们可以在这里调用监控器来监控爬取的情况,下一节我们会将监控器加入进来.

5.爬取逻辑,也是核心部分,在这里我们将提取页面中的元素、属性、url,以及添加后续要爬取的url,也就是我们在这里获取页面中我们想要的哪些数据,这里我们简单地写一个

page.putField("html", page.getHtml());

这句代码的意思是获取整个页面的Html代码,并且将其存到LinkedHashMap中,大家学过Map集合的话都应该知道键值对,不知道也没有关系,第一个”html”是键,第二个page.getHtml()是值,我们通过键可以获取到值.

然后我们用

String pageHtml = page.getResultItems().get("html").toString();

来获取刚才的值,这是页面的全部Html代码,咱们用System.err.out()打印一下刚才的页面。大家会发现控制台中打印了一次红色的Html代码。红色的便是我们输出的pageString。这样,咱们就获取到了页面的源码,之后我们来讲解如何获取后续url实现自动爬取,从上次中断的地方继续爬取,以及抽取网页中我们需要的数据.

WebMagic官方资源

首页:http://webmagic.io

文档:http://webmagic.io/docs/zh/

Github源码:https://github.com/code4craft/webmagic

码云源码:https://git.oschina.net/flashsword20/webmagic



2020 jeepxie.net webmaster#jeepxie.net
10 q. 0.008 s.
京ICP备10005923号