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的判断是很重要的。

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

  • 相关阅读:
    Hadoop-HA配置详细步骤
    Oracle 事务
    2 Oracle用户和表空间
    oracle 客户端监听文件配置
    Django 关联管理器
    第2讲 | 网络分层的真实含义是什么?
    hihoCoder #1151 : 骨牌覆盖问题·二 (矩阵快速幂,DP)
    poj 2411 Mondriaan's Dream (轮廓线DP)
    SPOJ COT2 Count on a tree II (树上莫队,倍增算法求LCA)
    HYSBZ 1086 王室联邦 (树的分块)
  • 原文地址:https://www.cnblogs.com/szw-blog/p/6170200.html
Copyright © 2011-2022 走看看