logo资料库

webmagic实现深度配置.doc

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
Webmagic深度加载
1.main()里通过request的extras属性加初始深度如下:
2.webmagic逻辑类process()里url加入队列之前判断当前深度
3.深度类LevelLimitScheduler继承PriorityScheduler类
4.爬虫启动方法
Webmagic 深度加载 前言:网上参考了大量的 webmagic 深度的例子都不太好用,所以自己整理了一下,直接切 入主题吧。(思路+主要代码) 1. main()里通过 request 的 extras 属性加初始深度如下: Request request = new Request(); Map extras = new HashMap(); extras.put("_level", 0); request.setExtras(extras); request.setUrl(“www.baidu.com”); 2.webmagic 逻辑类 process()里 url 加入队列之前判断当前深 度 //取符合标签的所有URL List all = page.getHtml().links().all(); for (String s : all) { // 添加爬取深度 Request request = new Request(); Map extras = new HashMap(); extras.put("_level", (Integer) page.getRequest().getExtra("_level") + 1); request.setExtras(extras); request.setUrl(s); System.out.println(request.getExtra("_level")); page.addTargetRequest(request); } 3.深度类 LevelLimitScheduler 继承 PriorityScheduler 类 package com.org.business.utils; import us.codecraft.webmagic.Request; import us.codecraft.webmagic.Task; import us.codecraft.webmagic.scheduler.PriorityScheduler; /**
* @author: xxxx * description: webMagic爬取深度设置 * date: * param: */ public class LevelLimitScheduler extends PriorityScheduler { /** * 构造方法 */ private int levelLimit = 0; public LevelLimitScheduler(int levelLimit) { this.levelLimit = levelLimit; } @Override public synchronized void push(Request request, Task task) { //深度判断 if (((Integer) request.getExtra("_level")) <= levelLimit) { super.push(request, task); } } 4. 爬虫启动方法 //webmagic 逻辑类(实现 PageProcessor 接口) WebMegicService webMegicService = new WebMegicService(); //实例化schedule深度 LevelLimitScheduler schedule = new LevelLimitScheduler(5); //配置Spider并启动爬虫 Spider spider = Spider .create(webMegicService) //第一步初始化的 request .addRequest(request) .setScheduler(schedule) .thread(10); spider.run();
分享到:
收藏