java网络爬虫如何控制爬取的深度_webmagic 页面深度爬取?

刚刚实现了一个控制页面深度的schedler,既然没有人回答的话可以简单说一下。

首先明白,webmagic中是存在一个待爬取得队列的,所有将要爬取的links都存放在这个队列里面。每次爬虫取一个link爬取,下载页面后分析出页面的内容产生新的link,新的link又推入队列,如此工作(这里不讨论去重了)

webmagic依靠继承schedler类来维护待爬取的links。关键的问题来了,需要控制深度,如何才能知道某一个link处于哪一层呢?如果知道了这个那么问题就迎刃而解了。

然而在webmagic里面,link是作为request对象存储的,而request对象是可以自己增加标记字段的。这样一来思路就来了,我们每次向待爬队列中推入的其实是一个request对象。

如此:

page.addTargetRequest(request);

那么我们直接在将这个request入队列之前增加一个标记位来标记它的层数就ok了。

Map extras = new HashMap();

extras.put("_level",(Integer)page.getRequest().getExtra("_level")+1);

request.setExtras(extras);

request.setUrl(url);

这个_level字段用来记录层数即可。

接下来我们只需要在processor里面每次判断一个当前page的request对象在第几层。新产生的request层数加1即可。

然后再schedler中判断层数是否到达了深度限制,如果到了就不入队列,

private BlockingQueue que

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值