网络爬虫知识 day09

1.2.2 编写页面解析功能

1.3 使用和定制Pipeline

        在WebMagic中,Pileline是抽取结束后,进行处理的部分,它主要用于抽取结果的保存,也可以定制Pileline可以实现一些通用的功能。在这里我们会定制Pipeline实现数据导入到数据库中

1.3.1 Pipeline输出

        Pipeline的接口定义如下:

        public interface Pipeline {

             // ResultItems保存了抽取结果,它是一个Map结构,

            // 在page.putField(key,value)中保存的数据,

            //可以通过ResultItems.get(key)获取

            public void process(ResultItems resultItems, Task task);

        }

        可以看到,Pipeline其实就是将PageProcessor抽取的结果,继续进行了处理的,其实在Pipeline中完成的功能,你基本上也可以直接在PageProcessor实现,那么为什么会有Pipeline?有几个原因:

        * 为了模块分离

      “页面抽取”和“后处理、持久化”是爬虫的两个阶段,将其分离开来,一个是代码结构比较清晰,另一个是以后也可能将其处理过程分开,分开在独立的线程以至于不同的机器执行。

        * Pipeline的功能比较固定,更容易做成通用组件

        每个页面的抽取方式千变万化,但是后续处理方式则比较固定,例如保存到文件、保存到数据库这种操作,这些对所有页面都是通用的。

        在WebMagic里,一个Spider可以有多个Pipeline,使用Spider.addPipeline()即可增加一个Pipeline。这些Pipeline都会得到处理,例如可以使用spider.addPipeline(new ConsolePipeline()).addPipeline(new FilePipeline())实现输出结果到控制台,并且保存到文件的目标。

1.3.2 已有的Pipeline

        WebMagic中就已经提供了控制台输出、保存到文件、保存为JSON格式的文件几种通用的Pipeline。

1.3.3 自定义Pipeline导入数据

        自定义SpringDataPipeline:

        

        在JobProcessor中修改process()启动的逻辑,添加代码:

        @Autowired

        private SpringDataPipeline springDataPipeline;

        public void process() {

                Spider.create(new JobProcessor())

                .addUrl(url)

                .addPipeline(this.springDataPipeline)

                .setScheduler(new QueueScheduler()

                .setDuplicateRemover(new BloomFilterDuplicateRemover(10000000)))

            .thread(5)

            .run();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陈工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值