分享个人开源爬虫框架

Cetty

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

An event dispatch crawler framework.

功能介绍

  • 基于完全自定义事件处理机制的爬虫框架。
  • 模块化的设计,提供强大的可扩展性。
  • 基于HttpClient支持同步和异步数据抓取。
  • 支持多线程。
  • 基于Jsoup页面解析框架提供强大的网页解析处理能力。

快速开始

使用Maven

<dependency>
  <groupId>com.jibug.cetty</groupId>
  <artifactId>cetty-core</artifactId>
  <version>0.1.5</version>
</dependency>
复制代码

帮助

1.详细文档: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()).        
                start();
    }
}
复制代码

历史版本

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

TODO

  • 支持注解方式
  • 支持代理池
  • 支持Berkeley 内存数据作为url管理器,提供海量url存储并提高存取效率
  • 支持热更新
  • 支持爬虫治理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YayCrawler是一个基于WebMagic开发的分布式通用爬虫框架,开发语言是Java。我们知道目前爬虫框架很多,有简单的,也有复杂的,有轻 量型的,也有重量型的。您也许会问:你这个爬虫框架的优势在哪里呢?额,这个是一个很重要的问题!在这个开篇中,我先简单的介绍一下我这个爬虫框架的特 点,后面的章幅会详细介绍并讲解它的实现,一图胜千言:1、分布式:YayCrawler就是一个大哥(Master)多个小弟(Worker)的架构(这种结构才是宇宙的真理),当然大哥还有一个小秘(Admin)和外界交往。2、通用性:我们很多时候需要爬取不同网站的数据,各个网站的结构和内容都有很大的差别,基本上大部分人都是遇到一个网站写一份代码,没法做到工具 的复用。YayCrawler就是想改变这种情况,把不同的部分抽象出来,用规则来指导爬虫做事。也就是说用户可以在界面上配置如何抓取某个页面的数据的 规则,等爬虫在爬取这个页面的时候就会用这个事先配置好的规则来解析数据,然后把数据持久化。3、可扩展的任务队列:任务队列由Redis实现,根据任务的状态有四种不同的任务队列:初始、执行中、成功、失败。您也可以扩展不同的任务调度算法,默认是公平调度。4、可定义持久化方式:爬取结果中,属性数据默认持久化到MongoDB,图片会被下载到文件服务器,当然您可以扩展更多的存储方式。5、稳定和容错:任何一个失败的爬虫任务都会重试和记录,只有任务真正成功了才会被移到成功队列,失败会有失败的原因描述。6、反监控组件:网站为了防止爬虫也是煞费苦心,想了一系列的监控手段来反爬虫。作为对立面,我们自然也要有反监控的手段来保障我们的爬虫任务,目前主要考虑的因素有:cookie失效(需要登陆)、刷验证码、封IP(自动换代理)。7、可以对任务设置定时刷新,比如隔一天更新某个网站的数据。作者博客地址:http://www.cnblogs.com/yuananyun 标签:爬虫

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值