Java爬虫(二)

Java爬虫(一)存在的问题及解决办法:

1. 获取数据的速度远大于处理数据的速度,导致队列中数据积累

措施: 对队列中的数据进行判断,若队列为空则获取数据,若不为空则睡眠

        while(true){
            byte[] msg=ju.rpop(redisKey_wemedia);
            if(msg==null){
                core();
            }
            else if(msg.length>1){
                ju.lpush(redisKey_wemedia, msg);
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

2. 从队列中获取数据时,会存在异常,这使得返回值为空,这依然会使队列数据积累,所以需要另做一个特殊返回值表示异常

    public  byte[] rpop(byte[] key) {
        byte[] bytes = null;
        Jedis jedis = null;
        if(jedisPool==null)
        {
            init();
        }
        try {
            jedis = jedisPool.getResource();
            bytes = jedis.rpop(key);
        } catch (Exception e) {
            jedisPool.returnBrokenResource(jedis);
            e.printStackTrace();
            //
            bytes=new byte[1];
            bytes[0]=Byte.valueOf("0");
            return bytes;
        } finally {
            close(jedis);
        }
        return bytes;
    }

3. 细节错误:

错误代码:

        String url=json.getString("url")+"&ispc=1";
        //System.out.println(url);
        int end=url.indexOf(".html")+".html".length();
        if(end>0){//这里会一直为真,而且块内获取的url是不正确的格式
            url=url.substring(0,end)+"?ispc=1";
        }
        else{
            continue;
        }

应该改为:

        String url=json.getString("url")+"&ispc=1";
        //System.out.println(url);
        int end=url.indexOf(".html");
        if(end>0){
            end+=".html".length();
            url=url.substring(0,end)+"?ispc=1";
        }
        else{
            continue;
        }

写某网站的爬虫,结果一不小心把线程写多了,导致别人发现了,直接过来投诉了。。。啊~

你可能感兴趣的:(Java)