WebMagic

WebMagic是一个简单易用的Java爬虫框架,涉及URL管理、数据流转和持久化。通过Request对象处理下载,Page封装了下载内容,ResultItems存储处理结果。使用Xpath、正则表达式和CSS选择器进行抽取。Spider类包含爬虫配置和启动方法,Scheduler组件负责URL管理和去重,支持HashSet、Redis和BloomFilter等去重策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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选择器
在这里插入图片描述
在这里插入图片描述
Spider的方法
在这里插入图 Spider片描述
爬虫的配置,启动和终止
site.me()可以对爬虫进行配置配置,包括编码,抓取时间,超时时间
在这里插入图片描述
爬虫分类
通用网络爬虫;聚焦网络爬虫;增量式爬虫;DeepWeb爬虫

Scheduler组件
管理Url的组件:抓取URL队列进行管理;对已抓取的URL进行去重。
在这里插入图片描述

在这里插入图片描述

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
在这里插入图片描述

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();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值