zoukankan      html  css  js  c++  java
  • jsoup.parse 的一个坑

    那天,写好一个爬虫 爬取某个网站的数据。 当时调用了公司不知道某个人写的 一个方法

    logger.info(joururl);
                
    doc= util.getDocument(joururl.toString());
    
    //这里通过url 去得到 网页

    本地调试 通过以后 就放到服务器上跑了。

    跑着跑着就卡住。 也不报错。 也不停。

    当时 以为是内存满了。找了很多方法。 能不重复new的对象坚决不重复new  定义java虚拟机内存 等

    还是卡住

    后来点进这个方法看才发现问题

    这个方法 是这样的 

        public static Document getDocument(String Url) {
            try {
                return Jsoup.connect(Url).userAgent(USER_AGENT).timeout(TIMEOUT).get();
            } catch (IOException e) {
                 return null;
            }
        }

    这里 有什么问题呢。  当网络波动的时候,或者别的原因, 没有拿到网页。 此时。 他catch了。 可是 不抛异常。 那么 程序不会停下来, 不会报错,线程会直接阻塞住。

    这就是卡的原因。

    所以 应该改进为

    Connection.Response response = null;
        for(int i=1;i<=3;i++){
         response = Jsoup.connect(Url).userAgent(USER_AGENT).timeout(TIMEOUT).execute();
         int statusCode = response.statusCode();
         if(statusCode!=200){
             log.info("get page error  to"+i+"connect");
         }
         else{
            return response.parse();
         }
        }

    即,当页面异常的时候  再连一次。 重复3次,假如3次都不成功,那么 抛异常 return null 

    也就 是说。  这个 statusCode的判断是很重要的。

     记住这个小坑。抛异常是非常重要的呀。 让我知道是哪个写的,我~~~~~~~~~

  • 相关阅读:
    多任务处理:控制默认行为
    多任务处理:管理调度Executor 接口
    多任务处理:服务器协议
    自己来做服务级的木马后门
    IBM ThinkPad
    韩国地名词汇/ 한국지명어휘(注册跑跑韩服有用)1
    EXE程序的自删除实现
    IBM ThinkPad
    EXE程序的自删除实现
    用VBScript实现对Windows注册表的修改
  • 原文地址:https://www.cnblogs.com/szw-blog/p/6170200.html
Copyright © 2011-2022 走看看