WebCollector爬虫并不像scrapy那样,提供一个pipeline这样的数据持久化接口。
用户通过自定义WebCollector中BreadthCrawler中的visit方法,来定义对每个页面的操作。同样,数据的持久化,也是在这里让用户自定义的。
例如下面这个示例,展示如何将网页的源码,保存到数据库中:
import cn.edu.hfut.dmic.webcollector.crawler.BreadthCrawler;
import cn.edu.hfut.dmic.webcollector.model.Page;
public class MyCrawler extends BreadthCrawler{
/*在visit方法里定义自己的操作*/
@Override
public void visit(Page page) {
//在这里加入数据持久化的代码
//例如用户自定义了一个类DBHelper,提供操作mysql的方法(添加删除数据)
//这里就不给出DBHelper类了,用户可以简单实现一个),
//假设DBHelper有个static方法insert(String url,String html)
//insert方法将网页的url和源码提交到mysql数据库
DBHelper.insert(page.getUrl(),page.getHtml());
}
public static void main(String[] args) throws Exception{
MyCrawler crawler=new MyCrawler();
/*配置爬取合肥工业大学网站*/
crawler.addSeed("http://www.hfut.edu.cn/ch/");
crawler.addRegex("http://.*hfut\\.edu\\.cn/.*");
/*进行深度为5的爬取*/
crawler.start(5);
}
}