网络爬虫框架cetty的实现

导读:本篇文章讲解 网络爬虫框架cetty的实现,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

功能介绍

  1. 基于完全自定义事件处理机制的爬虫框架
  2. 模块化的设计,提供强大的可扩展性
  3. 基于HttpClient支持同步和异步数据抓取
  4. 支持多线程
  5. 基于Jsoup页面解析框架提供强大的网页解析处理能力
    在这里插入图片描述

maven配置

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

简单demo的实现

package com.leo.demo.cettytest;

import com.google.common.collect.Lists;
import com.jibug.cetty.core.Bootstrap;
import com.jibug.cetty.core.Page;
import com.jibug.cetty.core.Payload;
import com.jibug.cetty.core.Result;
import com.jibug.cetty.core.handler.ConsoleReduceHandler;
import com.jibug.cetty.core.handler.HandlerContext;
import com.jibug.cetty.core.handler.ProcessHandlerAdapter;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.util.List;

/**
 * 抓取天涯论坛文章列表标题
 * http://bbs.tianya.cn/list-333-1.shtml
 *
 * @author Administrator
 * @Date 2019/5/8 10:39
 * @TODO
 */
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();
    }
}

提供能力

  1. 支持注解方式
  2. 支持代理池
  3. 支持支持Berkeley 内存数据作为url管理器,提供海量url存储并提高存取效率
  4. 支持热更新
  5. 支持爬虫治理

关于demo的github地址如下

https://github.com/leo825/sortalgorithm.git

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/72767.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!