七、业务逻辑处理

至此页面内容已经被gecco转换为一个普通的javabean。剩下的工作就是将javabean进一步清洗然后针对特定的业务逻辑进行持久化等处理。

一、实现pipeline接口

gecco采用管道过滤器模式灵活的实现业务逻辑处理,首先实现一个特定的管道过滤器,如:

@PipelineName("consolePipeline")
public class ConsolePipeline implements Pipeline<SpiderBean> {

    @Override
    public void process(SpiderBean bean) {
        System.out.println(JSON.toJSONString(bean));
    }

}

然后将定义的pipeline关联到对应的javabean中,如:

@Gecco(matchUrl="https://github.com/{user}/{project}", pipelines="consolePipeline")

二、结合spring开发业务逻辑

现在开发java服务器端应用已经基本离不开spring框架了,gecco实现了和spring框架的结合,请下载gecco-spring

使用注解方式配置Spring

扫描com.geccocrawler.gecco.spring,自动注入springPipelineFactory和consolePipeline

<context:component-scan base-package="com.geccocrawler.gecco.spring" />

使用非注解方式配置Spring

手动增加bean:springPipelineFactory和consolePipeline

<bean id="springPipelineFactory" class="com.geccocrawler.gecco.spring.SpringPipelineFactory"/>

<bean id="consolePipeline" class="com.geccocrawler.gecco.spring.ConsolePipeline"/>

初始化Gecco

加载完成bean后启动Gecco,可以通过继承SpringGeccoEngine类,初始化你的GeccoEngine,需要特别注意的是GeccoEngine需要用非阻塞模式start()运行:

@Service
public class InitGecco extends SpringGeccoEngine {

    @Override
    public void init() {
        GeccoEngine.create()
        .pipelineFactory(springPipelineFactory)
        .classpath("com.geccocrawler.gecco.spring")
        .start("https://github.com/xtuhcy/gecco")
        .interval(3000)
        .start();
    }

}

开发Pipeline

pipeline的开发和之前一样,唯一不同的是不需要@PipelineName("consolePipeline")定义pipeline的名称,而是使用spring的@Service定义,spring的bean名称即为pipeline的名称。可以参考:

@Service("consolePipeline")
public class ConsolePipeline implements Pipeline<SpiderBean> {
    @Override
    public void process(SpiderBean bean) {
        System.out.println(JSON.toJSONString(bean));
    }
}

gecco

继续阅读此作者的更多文章