以前說過,使用webmagic的架構,很容易就能夠經過擴展Scheduler構建一個分佈式的爬蟲。 參考淘寶官方博客的文章快速構建實時抓取集羣,構建了一個基於redis的分佈式爬蟲實現,代碼以下:html
<!-- lang: java --> public class RedisScheduler implements Scheduler{ private JedisPool pool; private static final String QUEUE_PREFIX = "queue_"; private static final String SET_PREFIX = "set_"; public RedisScheduler(String host){ pool = new JedisPool(new JedisPoolConfig(), host); } @Override public void push(Request request, Task task) { Jedis jedis = pool.getResource(); //使用SortedSet進行url去重 if (jedis.zrank(SET_PREFIX+task.getUUID(),request.getUrl())==null){ //使用List保存隊列 jedis.rpush(QUEUE_PREFIX+task.getUUID(),request.getUrl()); jedis.zadd(SET_PREFIX+task.getUUID(),System.currentTimeMillis(),request.getUrl()); } } @Override public Request poll(Task task) { Jedis jedis = pool.getResource(); String url = jedis.lpop(QUEUE_PREFIX+task.getUUID()); if (url==null) { return null; } return new Request(url); } }