WebCollector爬虫官网:https://github.com/CrawlScript/WebCollector

技术讨论群:250108697



怎样将爬虫内核导入自己的项目?

1.进入爬虫官网http://crawlscript.github.io/WebCollector/。下载压缩包。解压。

2.解压后找到“webcollector-版本-bin.zip”,解压。

3.将“webcollector-版本-bin.zip”解压后全部的jar,导入你的项目,就可以使用爬虫内核。

爬虫内核的demo

进入“webcollector-版本-bin.zip”解压后所在的目录(Windows用资源管理器。Linux用命令行)。

Windows:双击start.bat

Linux:运行sh start.sh

就可以看到一个简单的DEMO,这个DEMO能够爬取整站的网页(包含图片、文件、JS、CSS),并依照站点原来的文件路径存储到本地。

图中是用这个DEMO下载合肥工业大学官网上全部的网页和文件。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQUpBWEh1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

爬虫内核提供哪些功能?

1.一套可扩展框架。对于大多数爬虫开发人员来说,须要一个稳定、易懂的框架。

基于框架去做自己的爬虫。

2.爬虫所需的基本类库。

1)html源代码获取(文件下载)。

2)文件操作。

3)html源代码解析(抽取)。

4)线程池。

5)URL生成器(遍历器)。

6)消息机制(各组件通信)。

基本类库:

在介绍爬虫框架之前,先介绍一下基本类库。

假设您不想使用我们的爬虫框架。仅仅是想做一个主要的爬虫或者网页信息收集产品,或者您仅仅是想做一个简单的HTML源代码获取器,能够导入WebCollector的jar包,直接调用爬虫内核提供的类库。

爬虫框架:

爬虫框架会在兴许文章中具体介绍。这里仅仅介绍它与其它爬虫框架的一些差别。

WebCollector与其它爬虫框架最大的差别在于它提供了“消息机制”和“URL生成器”。

1)消息机制:

以往的大型爬虫框架。Heritrix、Nutch、Crawler4j,都是通过插件或者重载代码的机制,去实现对爬取信息的处理(解析、保存)。WebCollector提供了一套强大的消息机制(Handler)。

比如Crawler4j,假设你须要定制爬取时对每一个页面的操作,须要重载WebCrawler类中的相关函数,而且不能在执行时定制,必须在编译前就定制一个继承WebCrawler类的类,细节请看:http://code.google.com/p/crawler4j/

可是对于WebCollector,你仅仅须要定制一个Handler

        Handler gene_handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Page page = (Page) msg.obj;
System.out.println(page.html);
}
};

将这个handler传给遍历器就可以。

2)URL生成器:

Heritrx、Nutch、Crawler4j仅仅提供广度遍历的网页遍历方式。并且非常难通过他们自带的插件机制去改动遍历方式。所以WebCollector里提供了URL生成器(Generator),自己定义URL生成器能够完毕各种形式的URL遍历(尤其是对于深网爬取,如微博、动态页面)。

JAVA网络爬虫WebCollector深度解析——爬虫内核的更多相关文章

  1. Java 8 Optional 类深度解析

    Java 8 Optional 类深度解析 身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只 ...

  2. Java基础常用类深度解析(包含常见排序算法)

    目录 一.工具类 1.1.工具类的设计 1.1.1.公共静态方法 1.2.单例模式 二.包装类 2.1.基本类型的包装类 2.1.1.Integer 2.1.1.1.Integer >> ...

  3. Java 8 Optional类深度解析

    身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数. ...

  4. Java 8 Optional类深度解析(转)

    经常会遇到这样的问题,调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数. 新版本的Java,比如J ...

  5. Java 8 Optional类深度解析(转载)

    身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数. ...

  6. [转]Java 8 Optional类深度解析(null处理)

    原文链接:http://www.importnew.com/6675.html 本文由 ImportNew - 高俊阳 翻译自 javacodegeeks.欢迎加入翻译小组.转载请见文末要求. 身为一 ...

  7. Java基础(三) String深度解析

    String可以说是Java中使用最多最频繁.最特殊的类,因为同时也是字面常量,而字面常量包括基本类型.String类型.空类型. 一. String的使用 1. String的不可变性 /** * ...

  8. Java调用Kotlin程序深度解析

    异常: 在之前我们已经学习在Kotlin中的所有异常都是运行期的,而不像Java分为运行期和非运行期,下面用代码来演示一下,先建一个Java的异常: 然后在Kotlin中来调用一下该Java中的方法 ...

  9. JAVA爬虫 WebCollector

    JAVA爬虫 WebCollector 爬虫简介: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. 爬虫 ...

随机推荐

  1. Qt状态机框架

    The State Machine Framework 状态机框架提供了用于创建和执行状态图的类.概念和符号是基于Harel的Statecharts: A visual formalism for c ...

  2. ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法

    ActivityGroup简介 1.ActivityGroup的核心就是继承了该类,能够通过getLocalActivityManager()得到一个LocalActivityManager 如,Lo ...

  3. μC/OS学习资料(附Ebook)

    注意:下载地址位于文末. μC/OS-各版本源码 <嵌入式实时操作系统μC/OS-II> <嵌入式实时操作系统μC/OS-III> <μC/OSII2.52源码中文译注- ...

  4. Android自己定义控件(状态提示图表)

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重分享成果] 1 背景 前面分析那么多系统源代码了.也该暂停下来歇息一下,趁昨晚闲着看见一个有意思的需求就操 ...

  5. anroid里面的post请求

    一.需要用到的场景 在jQuery中使用$.post()就可以方便的发起一个post请求,在android程序中有时也要从服务器获取一些数据,就也必须得使用post请求了. 二.需要用到的主要类 在a ...

  6. c语言,结构体

    数据类型分为4种, 简单数据类型,构造数据类型,指针数据类型,空类型. 结构体属于构造数据类型,用struct标识. 声明一个结构体: Typedef  struct和struct c c++ typ ...

  7. Ubuntu 挂载ISO文件的方法

    1.在终端中输入:sudo mkdir /media/iso 在/media下生成一个iso文件夹用来挂载iso文件2.然后输入:sudo mount -o loop /home/X/X/XXXX.i ...

  8. 用户界面线程AfxBeginThread的使用

    用户界面线程在运行时会有一个窗口界面和与其相对应的窗口函数,所以它可以通过响应消息来和用户进行交互. AfxBeginThread 函数原型如下: CWinThread *AfxBeginThread ...

  9. MSSQL - 存储过程事物

    效果: 创建带有事物的存储过程: use sales --指定数据库 create table bb --创建bb 这个表 ( ID int not null primary key ,--账号 Mo ...

  10. FindChildControl与FindComponent

    前两天编码遇到了要使用FindChildControl方法获取指定名称的TSpeedButton按钮,结果折腾了半天就是没得结果(基础不扎实,呵呵),于是赶紧搜索了下,补习关于这两个方法的用法. TW ...