基于Vert.x和RxJava 2构建通用的爬虫框架

本文介绍了基于Vert.x和RxJava 2构建的爬虫框架,包括SpiderEngine和Spider组件。SpiderEngine可以管理多个Spider,提供API监控状态。框架内置了多种Downloader实现,并使用RxJava实现响应式处理。文章还展示了框架的使用示例,以及未来将增加验证码识别和Elasticsearch支持的功能。
摘要由CSDN通过智能技术生成

最近由于业务需要监控一些数据,虽然市面上有很多优秀的爬虫框架,但是我仍然打算从头开始实现一套完整的爬虫框架。

在技术选型上,我没有选择Spring来搭建项目,而是选择了更轻量级的Vert.x。一方面感觉Spring太重了,而Vert.x是一个基于JVM、轻量级、高性能的框架。它基于事件和异步,依托于全异步Java服务器Netty,并扩展了很多其他特性。

github地址:https://github.com/fengzhizi715/NetDiscovery

一. 爬虫框架的功能

爬虫框架包含爬虫引擎(SpiderEngine)和爬虫(Spider)。SpiderEngine可以管理多个Spider。

1.1 Spider

在Spider中,主要包含几个组件:downloader、queue、parser、pipeline以及代理池IP(proxypool),代理池是一个单独的项目,我前段时间写的,在使用爬虫框架时经常需要切换代理IP,所以把它引入进来。

proxypool地址:https://github.com/fengzhizi715/ProxyPool


其余四个组件都是接口,在爬虫框架中内置了一些实现,例如内置了多个下载器(downloader)包括vertx的webclient、http client、okhttp3、selenium实现的下载器。开发者可以根据自身情况来选择使用或者自己开发全新的downloader。

Downloader的download方法会返回一个Maybe 。

  
  
  
  1. package com.cv4j.netdiscovery.core.downloader;

  2. import com.cv4j.netdiscovery.core.domain.Request;

  3. import com.cv4j.netdiscovery.core.domain.Response;

  4. import io.reactivex.Maybe;

  5. /**

  6. * Created by tony on 2017/12/23.

  7. */

  8. public interface Downloader {

  9.    Maybe<Response> download(Request request);

  10.    void close();

  11. }

在Spider中,通过Maybe 对象来实现后续的一系列的链式调用,比如将Response转换成Page对象,再对Page对象进行解析,Page解析完毕之后做一系列的pipeline操作。

  
  
  
  1.                  downloader.download(request)

  2.                            .observeOn(Schedulers.io())

  3.                            .map(new Function<Response, Page>() {

  4.                                @Override

  5.                                public Page apply(Response response) throws Exception {

  6.                                    Page page = new Page();

  7.                                    page.setHtml(new Html(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值