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

 記住這個小坑。拋異常是非常重要的呀。 讓我知道是哪個寫的,我~~~~~~~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM