当前位置:  软件>java软件

JAVA爬虫 WebCollector

    来源:    发布时间:2015-02-24

    本文导语:  爬虫简介: WebCollector是一个无须配置、便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫。 爬虫内核: WebCollector致力于维护一个稳定、可扩的爬虫内核,便于开发者...

爬虫简介:

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

爬虫内核:

WebCollector致力于维护一个稳定、可扩的爬虫内核,便于开发者进行灵活的二次开发。内核具有很强的扩展性,用户可以在内核基础上开发自己想要的爬虫。源码中集成了Jsoup,可进行精准的网页解析。

量级:

WebCollector最常用的爬取器BreadthCrawler使用2^24的布隆过滤器进行URL管理,可处理2^24量级的数据,也就是3000W的网页。用户可以通过自定义插件来定制处理能处理更大量级数据的爬虫。

插件:

基于WebCollector内核,可以自己编写爬虫的http请求、链接解析器、爬取信息更新器、抓取器等模块,WebCollector把这些基于内核编写的模块称作"插件",通过不同的插件组合,可以在1分钟内,把WebCollector组装成一个全新的爬虫。

WebCollector内置了一套插件(cn.edu.hfut.dmic.webcollector.plugin.redis)。基于这套插件,可以把WebCollector的任务管理放到redis数据库上。在早期版本中,redis插件可以让爬虫处理较高量级的数据。从1.35版本开始,爬取器BreadthCrawler已经比使用redis插件的爬取器(RedisCrawler)具有更高的爬取量级。所以目前还是推荐使用BreadthCrawler作为爬取器。

用户可以根据自己的需求,去开发适合自己的插件。

MAVEN:

    cn.edu.hfut.dmic.webcollector
    WebCollector
    1.42

教程:

WebCollector文档(Cookbook)

WebCollector入门教程(中文版)

WebCollector内核解析—如何设计一个爬虫

用WebCollector制作一个爬取《知乎》并进行问题精准抽取的爬虫(JAVA)

用WebCollector爬取美食网站的所有图片

DEMO1:

用WebCollector制作一个爬取《知乎》并进行问题精准抽取的爬虫(JAVA) 

public class ZhihuCrawler extends BreadthCrawler{

    /*visit函数定制访问每个页面时所需进行的操作*/
    @Override
    public void visit(Page page) {
        String question_regex="^http://www.zhihu.com/question/[0-9]+";
        if(Pattern.matches(question_regex, page.getUrl())){
            System.out.println("正在抽取"+page.getUrl());
            /*抽取标题*/
            String title=page.getDoc().title();
            System.out.println(title);
            /*抽取提问内容*/
            String question=page.getDoc().select("div[id=zh-question-detail]").text();
            System.out.println(question);

        }
    }

    /*启动爬虫*/
    public static void main(String[] args) throws Exception{  
        ZhihuCrawler crawler=new ZhihuCrawler();
        crawler.addSeed("http://www.zhihu.com/question/21003086");
        crawler.addRegex("http://www.zhihu.com/.*");
        crawler.start(5);  
    }


}

DEMO2:

使用WebCollector的redis插件,进行爬取。(使用redis数据库进行任务管理)

/**
 * RedisCrawler是WebCollector的一个插件,将WebCollector的任务管理交
 * 给redis数据库,使WebCollector可以进行海量网页的爬取
 */
public class MyCrawler extends RedisCrawler{

	public MyCrawler(String tableName,String ip,int port){
		super(tableName,ip,port);
	}

	@Override
	public void visit(Page page){
		System.out.println(page.getDoc().title());
	}
		

	/*运行程序前请开启redis数据库*/
	public static void main(String[] args) throws Exception{

		/*mytest是任务名(用于区别不同爬虫),"127.0.0.1"和6379是redis数据库的ip和端口*/
		MyCrawler crawler=new MyCrawler("mytest", "127.0.0.1", 6379);
		
		/*爬取合肥工业大学新闻网*/
		crawler.addSeed("http://news.hfut.edu.cn/");
		crawler.addRegex("http://news.hfut.edu.cn/.*");


		/*过滤图片*/
		crawler.addRegex("-.*#.*");
		crawler.addRegex("-.*png.*");
		crawler.addRegex("-.*jpg.*");
		crawler.addRegex("-.*gif.*");
		crawler.addRegex("-.*js.*");
		crawler.addRegex("-.*css.*");

		/*设置线程数*/
		crawler.setThreads(30);

		/*设置是否为断点爬取模式*/
		crawler.setResumable(false);

		/*开始深度为5的爬取*/
		crawler.start(5);
	}
}

设计框架:

JAVA爬虫 WebCollector[图片]

Generator:抓取任务生成模块。

Filter:过滤器。对生成的任务进行过滤。

Fetcher:爬取任务。

Parser:解析任务(主要为链接抽取)。

Handler:消息机制。使用WebCollector的开发者通过handler可以快速定制自己的爬虫。WebCollector并没有使用Nutch的插件机制,而是使用handler来完成对爬虫功能的扩展。爬虫每遍历到一个页面,就会发送一个Message给Handler,开发者只要定制自己的Handler,即可对页面进行自定义操作。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • 各位学java的朋友,学java的未来是什么,你们学java都用来开发什么项目啊!来者给分!!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmname定义及介绍
  • 请问java程序中的import为什么有的用java.….*,而有的又用java.….…,有什么区别吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3