WebCollector 详细介绍
爬虫简介:
WebCollector 是一个无须配置、便于二次开发的 Java 爬虫框架(内核),它提供精简的的 API,只需少量代码即可实现一个功能强大的爬虫。WebCollector-Hadoop 是 WebCollector 的 Hadoop 版本,支持分布式爬取。
爬虫内核:
WebCollector 致力于维护一个稳定、可扩的爬虫内核,便于开发者进行灵活的二次开发。内核具有很强的扩展性,用户可以在内核基础上开发自己想要的爬虫。源码中集成了 Jsoup,可进行精准的网页解析。2.x 版本中集成了 selenium,可以处理 JavaScript 生成的数据。
内核构架图:
.....................................................
原文详细信息地址:点击打开链接
package cn.lonsun.supervise.errhref.internal.util; import java.util.List; import cn.edu.hfut.dmic.webcollector.crawler.BasicCrawler; import cn.edu.hfut.dmic.webcollector.model.CrawlDatums; import cn.edu.hfut.dmic.webcollector.model.Page; import cn.edu.hfut.dmic.webcollector.plugin.ram.RamDB; import cn.edu.hfut.dmic.webcollector.plugin.ram.RamDBManager; import cn.edu.hfut.dmic.webcollector.plugin.ram.RamGenerator; import cn.lonsun.common.util.AppUtil; import cn.lonsun.core.base.util.StringUtils; import cn.lonsun.core.util.SpringContextHolder; import cn.lonsun.supervise.errhref.internal.entity.ErrHrefEO; import cn.lonsun.supervise.errhref.internal.entity.HrefResultEO; import cn.lonsun.supervise.errhref.internal.service.IErrHrefService; import cn.lonsun.supervise.errhref.internal.service.IHrefResultService; /** * 网页数据采集 * @author gu.fei * @version 2016-1-25 13:52 */ public class ErrHrefCheckCrawler extends BasicCrawler { private static IErrHrefService errHrefService = SpringContextHolder.getBean("errHrefService"); private static IHrefResultService hrefResultService = SpringContextHolder.getBean("hrefResultService");; private static ErrHrefEO eo; /** * 构造函数初始化数据 * @param autoParse * @param taskId */ public ErrHrefCheckCrawler(boolean autoParse, Long taskId) { super(autoParse); RamDB ramDB = new RamDB(); this.dbManager = new RamDBManager(ramDB); this.generator = new RamGenerator(ramDB); eo = errHrefService.getEntity(ErrHrefEO.class,taskId); this.addSeed(eo.getWebSite()); this.addRegex(".*"); if(null != eo.getFilterHref()) { List<String> hrefs = StringUtils.getListWithString(eo.getFilterHref(),","); for(String href : hrefs) { this.addSeed("-.*" + href); } } /*不要爬取包含 # 的URL*/ this.addRegex("-.*#.*"); } @Override public void visit(Page page, CrawlDatums next) { if(page.getUrl().contains(eo.getWebDomain())) { this.setAutoParse(true); } else { this.setAutoParse(false); } } @Override public void afterVisit(Page page, CrawlDatums next) { super.afterVisit(page, next); next.putMetaData("parentUrl", page.getUrl()); } @Override public void fail(Page page, CrawlDatums next) { if(!AppUtil.isEmpty(page.getUrl())) { //不为空 if(!URLHelper.isEmail(page.getUrl())) { //非邮件格式 int code = URLHelper.isConnect(page.getUrl()); if(code != 200) { } } } } @Override public void notFound(Page page, CrawlDatums next) { if(!AppUtil.isEmpty(page.getUrl())) { //不为空 if(!URLHelper.isEmail(page.getUrl())) { //非邮件格式 int code = URLHelper.isConnect(page.getUrl()); if(code != 200) { } } } } }