java并发编程爬虫_开源项目学习笔记(1):Java爬虫引擎Gecco

对自由职业者来说,从开源项目中学习技术很重要。

这个学习开源项目的系列笔记,为个人记录,仅供参考,利益无关。

我试用后自己做的笔记

需要用户自行定义的类:

状态性的——实体类:代表爬虫抓取后的数据,继承引擎定义的实体基类,在字段上写注解指定路径(cssSelector或JSON路径),以指定该字段与响应内容(HTML或JSON)的哪部分对应

行为性的——后续处理器类:Pipeline,使用[实体对象],实现业务逻辑

引擎的关键类:

状态性的——请求队列:Scheduler,装着请求对象的队列

请求类:Request,代表一个应该进行的请求,存放在请求队列中,多个爬虫对象并发地从队列中取得请求对象,根据之发起HTTP请求

响应类:Response,将爬虫对象发起HTTP请求后获得的结果,封装成响应对象,由Render转换成实体对象

行为性的——引擎类:Engine,总的配置和入口

爬虫类:Spider,一个引擎可以有多个爬虫对象并发工作,每个爬虫对象有一个单独的线程,爬虫的线程主循环中,从请求队列中获得请求对象,交给下载器

下载器:Downloader,用于根据一个请求对象,发起一次HTTP请求,将HTTP响应封装成响应对象

转换器:Render,用于将响应对象转换成用户定义的实体类的对象,实现方式是通过反射读取实体类的字段上的注解并处理

总体流程:1. 引擎初始化,启动

2. 每个爬虫对象线程的主循环中,获得请求对象,由下载器进行下载

3. 下载器,使用请求对象,发起HTTP请求,把HTTP响应封装成响应对象

4. 转换器,使用响应对象,及实体类上的注解信息,将响应对象渲染成有业务意义的实体对象

5. 后续处理器类,使用实体对象,完成业务

组件化:1. 每个关键步骤,都提取成一个特定的组件

2. 组件们形成流水线,前面的组件的输出就是后面的组件的输入

3. 每个组件可以有多个实现类,具体使用哪个实现类,根据实际情况判断(面向接口编程的基本目的)

4. 一个引擎对应多个爬虫,每个爬虫有自己的线程,全局的状态存在引擎对象的字段中,该字段是线程安全的,以便爬虫们并发使用,不致出错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值