编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

网络爬虫知识 day09

wxchong 2024-06-10 16:48:40 开源技术 24 ℃ 0 评论

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

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表