Cetty

一个轻量级的基于事件分发的爬虫框架。

Build Status License

An event dispatch crawler framework.

功能介绍

快速开始

使用Maven

<dependency>
  <groupId>com.jibug.cetty</groupId>
  <artifactId>cetty-core</artifactId>
  <version>0.1.8</version>
</dependency>

帮助

1.详细文档:http://cetty.jibug.com/
2.QQ群

3.bug反馈:issues

让我们来写第一个demo

/**
 * 抓取天涯论坛文章列表标题
 * http://bbs.tianya.cn/list-333-1.shtml
 *
 * @author heyingcai
 */
public class Tianya extends ProcessHandlerAdapter {

    @Override
    public void process(HandlerContext ctx, Page page) {
        //获取 Document
        Document document = page.getDocument();
        //dom解析
        Elements itemElements = document.
                select("div#bbsdoc>div#bd>div#main>div.mt5>table>tbody").
                get(2).
                select("tr");
        List<String> titles = Lists.newArrayList();
        for (Element item : itemElements) {
            String title = item.select("td.td-title").text();
            titles.add(title);
        }

        //获取Result对象,将我们解析出来的结果向下一个handler传递
        Result result = page.getResult();
        result.addResults(titles);

        //通过fireXXX 方法将本handler 处理的结果向下传递
        //本教程直接将结果传递给ConsoleHandler,将结果直接输出控制台
        ctx.fireReduce(page);
    }

    public static void main(String[] args) {
        //启动引导类
        Bootstrap.
                me()
                //使用同步抓取
                .isAsync(false)
                //开启一个线程
                .setThreadNum(1)
                //抓取入口url
                .startUrl("http://bbs.tianya.cn/list-333-1.shtml")       
                //通用请求信息
                .setPayload(Payload.custom())       
                //添加自定处理器
                .addHandler(new Tianya())        
                //添加默认结果处理器,输出至控制台
                .addHandler(new ConsoleReduceHandler())
                //是否启用实时抓取模式,如果启用非实时抓取模式则当任务队列中没有任务的一段时间后爬虫会自动处于close状态
                .isDuration(false)
                .start();
    }
}

历史版本

版本 说明
0.1.0 支持基本爬虫功能
0.1.5 1.支持xpath 2.修复添加cookie失效问题 3.优化底层逻辑
0.1.7 修复底层bug

TODO