Pipeline的几种输出实现

2022-05-13 10:16:15 浏览数 (1)

1 ConsolePipeline 控制台输出

代码语言:javascript复制
/*
 * 爬取类
 */
public class MyProcessor implements PageProcessor {
    public void process(Page page) {
        //page.addTargetRequests( page.getHtml().links().all() );//将当前页 面里的所有链接都添加到目标页面中
        //
        page.addTargetRequests( page.getHtml().links().regex("https://blog.csdn.net/[ ‐z 0‐9 ‐] /article/details/[0‐9]{8}").all() );
        //System.out.println(page.getHtml().xpath("//*[@id="mainBox"]/main/div[1]/div[1]/h1/text()").toString());
        page.putField("title",page.getHtml().xpath("//*[@id="mainBox"]/main/div[1]/div[1]/h1/text()").toString());
    }

    public Site getSite() {
        return Site.me().setSleepTime(100).setRetryTimes(3);    
}

    public static void main(String[] args) {
        Spider.create( new MyProcessor() )
                .addUrl("https://blog.csdn.net")
                .addPipeline(new ConsolePipeline()) 
               .run();
    }
}
2 FilePipeline文件保存
代码语言:javascript复制
     public static void main(String[] args) {
        Spider.create( new MyProcessor() )
                .addUrl("https://blog.csdn.net")
                .addPipeline(new ConsolePipeline())
                .addPipeline(new FilePipeline("e:/data"))//以文件方式保存                 .run();
    }
3JsonFilePipeline 每条数据以JsouFile形式保存jsou文件
代码语言:javascript复制
//以json方式保存
     public static void main(String[] args) {
        Spider.create( new MyProcessor() )
                .addUrl("https://blog.csdn.net")
                .addPipeline(new ConsolePipeline())
                .addPipeline(new FilePipeline("e:/data"))
                .addPipeline(new JsonFilePipeline("e:/json"))// 以json方式保存 
                .run();
    }
4 定制自己的Pipeline,控制保存的信息

(1)创建类MyPipeline实现接口Pipeline

代码语言:javascript复制
import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Task;
import us.codecraft.webmagic.pipeline.Pipeline;
public class MyPipeline implements Pipeline {
    public void process(ResultItems resultItems, Task task) {
        String title=resultItems.get("title");
        System.out.println("我的定制的 title:" title);
    }
}

(2)修改main方法

代码语言:javascript复制
     public static void main(String[] args) {
        Spider.create( new MyProcessor() )
                .addUrl("https://blog.csdn.net")
                .addPipeline(new ConsolePipeline())
                .addPipeline(new FilePipeline("e:/data"))
                .addPipeline(new JsonFilePipeline("e:/json"))                .addPipeline(new MyPipeline())//定制化输出
                .run();
    }

0 人点赞