Webmagic控制爬取深度

本文介绍了在使用Webmagic进行网页爬取时如何控制爬取深度。通过分析Webmagic的执行流程,了解到Spider.run()启动后,downloader组件生成Page对象,processor组件处理Page并可能添加新的TargetRequest。通过在添加请求时进行条件判断,控制request的额外属性extra来跟踪深度,从而实现爬取深度的限制。作者分享了自己的尝试和代码修改,提供了深入理解Webmagic工作原理的思路。
摘要由CSDN通过智能技术生成

 

最近搞毕业设计,使用到了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解决多线程下

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值