WebMagic

WebMagic介绍
WebMagic
下载,处理,管理,持久化
数据流转对象
request:URL地址封装,是下载和处理的交互的载体
Page:下载的一个页面——Html,Json,文本格式
ResultItems:相当于一个map,保存PageProcesser处理的结果,提供Pipeline使用。一个字段skip,设置true,则不应被处理。

简单入门案例代码
需要导入 webmagic的工程‘

public class JobProcessor implements PageProcessor {
    //这个方法解析页面
    public void process(Page page) {
        //解析返回数据page,并且把解析的结果放到ResultItem
        page.putField("div",page.getHtml().css("div._2Kb8-nplK47lBDl_iifFWM" ).all());
    }

    private Site site=Site.me();
    public Site getSite() {
        return site;
    }
//主函数执行爬虫
    public static void main(String[] args) {
        //Spider大的容器
        Spider.create(new JobProcessor() )
                //设置爬取页面的数据
                .addUrl("https://kuaibao.jd.com/?ids=214569150,789182,223349485,790737")
                .run();

实现PageProcess
抽取三种抽取技术:
Xpath:http://www.w3school.com.cn
正则表达式:
CSS选择器
WebMagic
WebMagic
Spider的方法
WebMagic
爬虫的配置,启动和终止
site.me()可以对爬虫进行配置配置,包括编码,抓取时间,超时时间
WebMagic
爬虫分类
通用网络爬虫;聚焦网络爬虫;增量式爬虫;DeepWeb爬虫

Scheduler组件
管理Url的组件:抓取URL队列进行管理;对已抓取的URL进行去重。
WebMagic

WebMagic

package cn.itcast.webmagic.test;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.FilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.scheduler.BloomFilterDuplicateRemover;
import us.codecraft.webmagic.scheduler.QueueScheduler;

public class JobProcessor implements PageProcessor {
    //这个方法解析页面
    public void process(Page page) {
        //解析返回数据page,并且把解析的结果放到ResultItem
        page.putField("div",page.getHtml().css("div.dt cw-icon" ).all());
        //xpath
        page.putField("key2",page.getHtml().xpath("//div[@id=shortcut-2014]/div/ul/li/a"));
        //正则
        page.putField("div3",page.getHtml().css("div._3oESJEbA6EDqNUcNu8namk ").regex(".*健康.*").all());
        //获取连接   以2结尾
        page.addTargetRequests(page.getHtml().css("div._3oESJEbA6EDqNUcNu8namk data-log-url").links().regex(".*2$").all());
        page.putField("url",page.getHtml().css("div.mt h1").all());
        page.addTargetRequest("https://www.jd.com/news.html?id=37319");
        page.addTargetRequest("https://www.jd.com/news.html?id=37319");
        page.addTargetRequest("https://www.jd.com/news.html?id=37319");
    }
    //site.me()可以对爬虫进行配置配置,包括编码,抓取时间,超时时间
    private Site site=Site.me()
            .setCharset("utf8")
            .setTimeOut(10000) //设置超时时间10ms
            .setRetrySleepTime(30000)//设置重试的间隔时间
            .setSleepTime(3)//设置重试次数
            ;
    public Site getSite() {
        return site;
    }
    //主函数执行爬虫
    public static void main(String[] args) {
        //Spider大的容器
        Spider spider=Spider.create(new JobProcessor() )
                //设置爬取页面的数据
                .addUrl("https://kuaibao.jd.com/?ids=214569150")
                //设置路径
                .addPipeline(new FilePipeline("文件路经"))
                //分配线程处理
                .thread(5)
                //设置布隆去重过滤器,添加依赖
                .setScheduler(new QueueScheduler().setDuplicateRemover(new BloomFilterDuplicateRemover(1000)));

        spider.run();
    }
}

三种去重方式
HashSet;Redis;BloomFilter
WebMagic

public class JobProcessor implements PageProcessor {
    //这个方法解析页面
    public void process(Page page) {
        //解析返回数据page,并且把解析的结果放到ResultItem
        page.putField("div",page.getHtml().css("div.dt cw-icon" ).all());
        //xpath
        page.putField("key2",page.getHtml().xpath("//div[@id=shortcut-2014]/div/ul/li/a"));
        //正则
        page.putField("div3",page.getHtml().css("div._3oESJEbA6EDqNUcNu8namk ").regex(".*健康.*").all());
        //获取连接   以2结尾
        page.addTargetRequests(page.getHtml().css("div._3oESJEbA6EDqNUcNu8namk data-log-url").links().regex(".*2$").all());
        page.putField("url",page.getHtml().css("div.mt h1").all());
        page.addTargetRequest("https://www.jd.com/news.html?id=37319");
        page.addTargetRequest("https://www.jd.com/news.html?id=37319");
        page.addTargetRequest("https://www.jd.com/news.html?id=37319");
    }
    //site.me()可以对爬虫进行配置配置,包括编码,抓取时间,超时时间
    private Site site=Site.me()
            .setCharset("utf8")
            .setTimeOut(10000) //设置超时时间10ms
            .setRetrySleepTime(30000)//设置重试的间隔时间
            .setSleepTime(3)//设置重试次数
            ;
    public Site getSite() {
        return site;
    }
    //主函数执行爬虫
    public static void main(String[] args) {
        //Spider大的容器
        Spider spider=Spider.create(new JobProcessor() )
                //设置爬取页面的数据
                .addUrl("https://kuaibao.jd.com/?ids=214569150")
                //设置路径
                .addPipeline(new FilePipeline("文件路经"))
                //分配线程处理
                .thread(5)
                //设置布隆去重过滤器,添加依赖
                .setScheduler(new QueueScheduler().setDuplicateRemover(new BloomFilterDuplicateRemover(1000)));
        spider.run();
    }
}

上一篇:WebMaic介绍


下一篇:Java之ArrayDeque