JAVA爬虫 WebCollector
本文导语: 爬虫简介: 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制作一个爬取《知乎》并进行问题精准抽取的爬虫(JAVA)
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); } }
设计框架:
Generator:抓取任务生成模块。
Filter:过滤器。对生成的任务进行过滤。
Fetcher:爬取任务。
Parser:解析任务(主要为链接抽取)。
Handler:消息机制。使用WebCollector的开发者通过handler可以快速定制自己的爬虫。WebCollector并没有使用Nutch的插件机制,而是使用handler来完成对爬虫功能的扩展。爬虫每遍历到一个页面,就会发送一个Message给Handler,开发者只要定制自己的Handler,即可对页面进行自定义操作。