原标题:java爬虫框架的使用

随着互联网的发展,编程程序语言也开始被越来越多的人所掌握,但是自始至终,java语言一直是被使用范围最广的编程语言。今天,武汉中软国际主要给大家讲解的是java语言中的爬虫java框架结构是怎么使用和编写的。

消息的设计

在消息队列中,消息一共有四种类型。分别是url,page,result和自定义类型。在worker的程序中,可以通过messagequeue的四种方法(sendUrl, sendPage, sendResult, send)来插入消息。worker的downloader会处理url消息,processor会处理page消息,saver会处理result消息,freeman会处理所有的自定义的消息。我们所要做的工作,就是实现好worker中的这四个函数。

Worker接口的设计

JLiteSpider将整个的爬虫抓取流程抽象成四个部分,由四个接口来定义。分别是downloader,processor,saver和freeman。它们分别处理上述提到的四种消息。

你所需要做的是,实现这个接口,并将想要抓取的url链表返回。具体的实现细节,可以由你高度定制。

1. Downloader:

这部分实现的是页面下载的任务,将想要抓取的url链表,转化(下载后存储)为相应的页面数据链表。

接口设计如下:

public interface Downloader {

/**

* 下载url所指定的页面。

* @param url

* 收到的由消息队列传过来的消息

* @param mQueue

* 提供把消息发送到各个消息队列的方法

* @throws IOException

*/

public void download(Object url, Map mQueue) throws IOException;

}

你同样可以实现这个接口,具体的实现可由你自由定制,只要实现 download 函数。 url 是消息队列推送过来的消息,里面不一定是一条 url ,具体是什么内容,是由你当初传入消息队列时决定的。 mQueue 提供了消息发送到各个消息队列的方法,通过 mQueue.get("...") 选取消息队列,然后执行messagequeue的四种方法(sendUrl, sendPage, sendResult, send)来插入消息。

2. Processor:

Processor 是解析器的接口,这里会从网页的原始文件中提取出有用的信息。

接口设计:

public interface Processor{

/**

* 处理下载下来的页面源代码

* @param page

* 消息队列推送过来的页面源代码数据消息

* @param mQueue

* 提供把消息发送到各个消息队列的方法

* @throws IOException

*/

public void process(Object page, Map mQueue) throws IOException;

}

实现这个接口,完成对页面源码的解析处理。 page 是由消息队列推送过来的消息,具体格式同样是由你在传入时决定好的。 mQueue 使用同上。

3. Saver:

Saver 实现的是对解析得到结果的处理,可以将你解析后得到的数据存入数据库,文件等等。或者将url重新存入消息队列,实现迭代抓取。

接口的设计:

public interface Saver {

/**

* 处理最终解析得到的结果

* @param result

* 消息队列推送过来的结果消息

* @param mQueue

* 提供把消息发送到各个消息队列的方法

* @throws IOException

*/

public void save(Object result, Map mQueue) throws IOException;

}

通过实现这个接口,可以完成对结果的处理。你同样可以实现这个接口,具体的实现可由你自由定制,只要实现 download 函数。 result 是消息队列推送过来的结果消息,具体的格式是由你当初传入消息队列时决定的。 mQueue 的使用同上。

4. Freeman:

通过上述的三个流程,可以实现爬虫抓取的一个正常流程。但是 jlitespider 同样提供了自定义的功能,你可以完善,加强,改进甚至颠覆上述的抓取流程。 freeman就是一个处理自定义消息格式的接口,实现它就可以定义自己的格式,以至于定义自己的流程。

接口的设计:

public interface Freeman {

/**

* 自定义的处理函数

* @param key

* key为自定义的消息标记

* @param msg

* 消息队列推送的消息

* @param mQueue

* 提供把消息发送到各个消息队列的方法

* @throws IOException

*/

public void doSomeThing(String key, Object msg, Map mQueue) throws IOException;

}

通过实现 doSomeThing 函数,你就可以处理来自消息队列的自定义消息。 key 为消息的标记, msg 为消息的内容。同样,通过 mQueue 的 send 方法,可以实现向消息队列发送自定义消息的操作。(需要注意,自定义的消息标记不能为: url , page, result 。否则会被认为是 jlitespider 的保留消息,也就是由上述的三个接口函数来处理。)

总结说明

jlitespider 的设计可能会让您有些疑惑,不过等您熟悉这一整套的设计之后,您就会发现 jlitespider 是多么的灵活和易于使用。

责任编辑:

java爬虫框架哪个好_java爬虫框架的使用相关推荐

  1. java文件正确编写格式_java Srpingboot框架书写mapper代码的正确格式

    java Srpingboot框架书写mapper代码的正确格式 发布时间:2019-07-16原创 阅读(326) 最近新项目使用的是springboot框架,很多地方比以往的spring框架做了简 ...

  2. java struts2上传文件_java Struts2框架下实现文件上传功能

    本文实例为大家分享了struts2框架实现文件上传的方法,供大家参考,具体内容如下 struts2的配置过程 (1)在项目中加入jar包 (2)web.xml中filter(过滤器)的配置 xmlns ...

  3. java mvc建包结构_Java SSM框架的配置方法、MVC结构的分析、响应的流程

    今天头一次配置成功一个SSM框架,兴奋之余,还应该从使用的角度,将整个ssm配置的方法,配置的原因,认真的分析一下.在结束了对SSM框架简单的分析之后,就要开始回归基础,全面的认真复习.所以这个文档, ...

  4. java集合框架的接口_Java集合框架——Set接口

    第三阶段 JAVA常见对象的学习 集合框架--Set接口 List集合的特点是有序的,可重复的,是不是存在这一种无序,且能保证元素唯一的集合呢?(HashSet )这就涉及到我们今天所要讲的Set集合 ...

  5. java集合框架的接口_Java集合框架之Collection接口详解

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...

  6. JAVA爬取虎嗅网截图_java爬虫爬取网站使用多线程(虎嗅网站)

    java爬虫爬取网站使用多线程(虎嗅网站) java爬虫爬取网站使用多线程(虎嗅网站) 图解虎嗅爬虫优化方案 pom 如下: org.apache.httpcomponents httpclient ...

  7. java五大框架有哪些_Java五大框架

    2017-6-13Lifusen 此文章仅代表个人观点,如有问题提出请联系Q:570429601 1.Hibernate (开放源代码的对象关系映射框架) Hibernate是一个开放源代码的对象关系 ...

  8. java nio框架netty教程_Java NIO框架Netty教程(一) – Hello Netty

    先啰嗦两句,如果你还不知道Netty是做什么的能做什么.那可以先简单的搜索了解一下.我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序.具体能做什么,各位可以尽量发挥想象.技术,是 ...

  9. java 爬中 验证码识别_JAVA爬虫---验证码识别技术(一)

    Python中有专门的图像处理技术比如说PIL,可以对验证码一类的图片进行二值化处理,然后对图片进行分割,进行像素点比较得到图片中的数字.这种方案对验证码的处理相对较少,运用相对普遍,很多验证码图片可 ...

最新文章

  1. 进程与线程 thread (二)——线程概念
  2. Perl的输出:print、say和printf、sprintf
  3. 腾讯多任务模型MFH
  4. C#多线程编程之:lock使用注意事项
  5. 计算机音乐除了春天爱情和樱花,High4IU《除了春天爱情和樱花》新歌试听
  6. apt update无法连接上 127.0.0.1:10808
  7. 网络中最常用的网络命令(5)-完整参数
  8. vue npm run dev 报错 semver\semver.js:312 throw new TypeError('Invalid Version: ' + version)
  9. 项目管理工具 web_14个用于改善项目的Web工具
  10. 局域网SDN技术硬核内幕 三 从物到人——SDN走进园区网络
  11. (转)iOS及Mac开源项目和学习资料【超级全面】
  12. java毕业设计成品源码网站基于javaWeb停车场车辆管理系统的设计与实现|车位
  13. 数字电位器X9312
  14. 水平耀斑_搜索引擎提交的内容:引发耀斑
  15. Baidu Netdisk华为鸿蒙倍速下载
  16. 年终报告 20PPPT模板
  17. 低代码指南100方案:13技术赋能公益,轻松“一起做好事”
  18. STM32 FOC BLDC 无刷电机 控制开发板资料 视频教程 例程 FOC库
  19. linux exp parfile用法,逻辑备份与恢复-使用EXP进行逻辑备份
  20. CMWAP与CMNET

热门文章

  1. 高校一键健康打卡及其检测系统
  2. 2021.3Pycharm 和 Idea下载地址,Linux、Windows、macOS各版本
  3. 干货合辑!Ms08067安全实验室2022年度盘点
  4. python图像特征提取与匹配_图像特征特点及其常用的特征提取与匹配方法
  5. ExpandableListView实现可展开的ListView
  6. OpenGL是什么?GPU是什么?
  7. wpf图表-Visifire使用教程分享
  8. VueDemo1:记事簿(v-for、v-on、v-model)
  9. 射频工程师该知道的功率放大器知识
  10. repost 力出一孔,“感觉睡觉都是在浪费时间”--孙正义