玩转webmagic代码之Scheduler
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> webmagic上线之后,因为灵活性很强,得到了一些爬虫老手的欢迎,但是对于新手来说可能稍微摸不着头脑,我的需求是这样子,什么模块化,什么灵活性,但是看了半天,我也不知道怎么解决我的问题啊? 这里先谈谈Scheduler,不单关乎框架,更多是一些爬虫通用的思想,希望对大家有帮助。 为什么要有Scheduler 其实Scheduler并非webmagic独创,在scrapy以及其他成熟爬虫中都有类似模块。Scheduler管理了所有待抓取的url,单个爬虫自己是无法控制要抓取什么的,抓什么都由Scheduler决定。 这样子最大的好处就是,爬虫本身没有状态,给一个url,处理一个,非常容易进行水平扩展(就是加线程、或者加机器),而且即使单台爬虫宕机,也不会有什么损失。这跟我们在应用开发中,所说的"服务无状态"的思想是很像的。而相反,如果在单个爬虫线程内部,循环甚至递归的进行抓取,那么这部分工作是无法扩展的,而且宕机之后恢复会很困难。 <!-- lang: java --> public interface Scheduler { public void push(Request request, Task task); public Request poll(Task task); }