WebMagic 爬虫框架的入门使用

来源:互联网 发布:股票走势图软件 编辑:程序博客网 时间:2024/06/05 17:30

 代码:

package test;import us.codecraft.webmagic.Page;import us.codecraft.webmagic.Site;import us.codecraft.webmagic.Spider;import us.codecraft.webmagic.pipeline.ConsolePipeline;import us.codecraft.webmagic.pipeline.JsonFilePipeline;import us.codecraft.webmagic.processor.PageProcessor;public class GithubRepoPageProcessor implements PageProcessor {    // 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);    private static int count =0;    //抓取了几条记录    @Override    // process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑    public void process(Page page) {        // 部分二:定义如何抽取页面信息,并保存下来        page.putField("author", page.getUrl().regex("https://github\\.com/(\\w+)/.*").toString()); //保存抽取结果        page.putField("name", page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()").toString()); //按照某个规则对结果进行抽取        if (page.getResultItems().get("name") == null) {            //skip this page            page.setSkip(true);        }        page.putField("readme", page.getHtml().xpath("//div[@id='readme']/tidyText()"));        // 部分三:从页面发现后续的url地址来抓取        page.addTargetRequests(page.getHtml().links().regex("(https://github\\.com/[\\w\\-]+/[\\w\\-]+)").all());        count++;   //     System.out.println("你抓取的页面如下:"+ page);    }    @Override    public Site getSite() {        return site;    }    @SuppressWarnings("deprecation")public static void main(String[] args) {    long startTime, endTime;        System.out.println("开始爬取...");        startTime = System.currentTimeMillis();        Spider.create(new GithubRepoPageProcessor())                //从"https://github.com/code4craft"开始抓                .addUrl("https://github.com/code4craft")                .addPipeline(new ConsolePipeline())       //控制台输出             // 下载下来的文件就会保存在D盘的webmagic目录中            //    .addPipeline(new JsonFilePipeline("D:\\webmagic\\"))                //开启5个线程取                .thread(5)                //启动爬虫                .run();        endTime = System.currentTimeMillis();        System.out.println("爬取结束,耗时约" + ((endTime - startTime) / 1000) + "秒,抓取了"+count+"条记录");    }}

截图:




原创粉丝点击