最近搞毕业设计,使用到了webmagic,但是才开始学习,对各个组件都还不是很熟悉。相信初学者都会遇到一个问题,那就是:必须要让所有URL都处理完,才能结束整个爬虫过程吗?
当然,动动脑筋就知道当然不用,但是作为新手还是不知道怎么去控制这个爬虫,我一开始也是只会傻傻的设置一个最开始的url,然后写processs方法。但是经过不断的百度,渐渐加深了对webmagic的理解,也开始看起源码来了。
一开始,我用的是非常简单的方法,如下:
int pageCnt = 0;
public static int limit = 10000; //最多爬取1e4个界面,虽然pageCnt不准确
@Override
public void process(Page page) {
if (pageCnt > limit){
page.setSkip(true);
return;
}
pageCnt++;
}
这样看似可以,但是实际上有缺陷,就是pageCnt约束性不强,可能是多线程的原因,即使pageCnt大于limit了,还是会执行,我也不知道为啥,但是, 一般最终处理的页面数是limit的10倍,所以,这个limit还是能限制爬虫提前结束的,就是粗糙了一点,不到万不得已,还是别用这个方法。
(后来看到了可以使用AtomicInteger解决多线程下