JAVA爬虫 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:

?
1
2
3
4
5
< dependency >
     < groupId >cn.edu.hfut.dmic.webcollector</ groupId >
     < artifactId >WebCollector</ artifactId >
     < version >1.42</ version >
</ dependency >

教程:

WebCollector文档(Cookbook)

WebCollector入门教程(中文版)

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

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

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

DEMO1:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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数据库进行任务管理)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
  * 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_第1张图片

Generator:抓取任务生成模块。

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

Fetcher:爬取任务。

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

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

你可能感兴趣的:(线程,爬虫,数据,扩展)