jsoup獲取響應內容不完整

Jsoup抓取網頁只能抓取一部分不能完整獲取響應內容時,一般有以下幾個原因。

1. 網絡異常,這個很少發生,jsoup會報告exception

2. 網絡超時,可以設置 connection.timeout(n) 增加超時時間。

3. 看起來都正常,沒有異常發生。 但是獲取的數據就是少了一截。如果獲取到的數據不超過1024k,程序正常,得到的數據也正常。一旦數據超過1024k時,數據就只有預期得到數據的前1024k字節了,其他的超過響應長度就得不到了。

解決辦法:

 String URL="http://49.235.90.76:5000/";
            //通過延遲50000000毫秒,設置響應body不限制
            Document doc= Jsoup.connect(URL).timeout(50000000).maxBodySize(0).get();

超時時間可根據自己需求調整,越大越不容易超時,maxBodySize(0),設置爲0,就可以得到不限響應長度的數據了。

再貼個項目中源碼以供參考:

 @GetMapping("/read")
    public AjaxResult read() throws IOException {
        String URL="http://49.235.90.76:5000/";
            //通過延遲50000000毫秒,設置響應body不限制
            Document doc= Jsoup.connect(URL).timeout(50000000).maxBodySize(0).get();
            // 通過class的名字得到(即XX),一個數組對象Elements裏面有我們想要的數據,至於這個div的值呢你打開瀏覽器按下F12就知道了;
            Elements elements = doc.getElementsByTag("ol");
            System.out.println("Result---------------------start:");
            int i=0;
            for (Element element : elements) {
                Elements elements1=element.getElementsByTag("li");
                for (Element element2: elements1) {
                    //獲取題目大類
                    //Elements category=element2.getElementsByTag("i");
                    //獲取題目內容
                    Elements content=element2.getElementsByTag("div");
                    //獲取題目選項
                    Elements options=element2.getElementsByTag("ul");
                    //獲取答案
                    Elements answer=element2.getElementsByTag("b");
                    if(StringUtils.isNotEmpty(answer)) {
                        i++;
                        XxqgCategory ct = new XxqgCategory();
                        if (StringUtils.isNotEmpty(options.text())) {
                            ct.setCategory("選擇題");
                        }else{
                            ct.setCategory("填空題");
                        }
                        ct.setAnswer(answer.text());
                        ct.setContent(content.text().replace("【", "").replace("】", "").replace("A", "").replace("B", "").replace("C", "").replace("D", "").trim());
                        ct.setOptions(options.text());
                        //寫入數據庫
                         //categoryService.insertCategory(ct);
                        //System.out.print("題目大類:"+category.html());
                        System.out.print(i + ":題目內容:" + content.text().replace("【", "").replace("】", "").replace("A", "").replace("B", "").replace("C", "").replace("D", "").trim());
                        System.out.print("  ,題目選項:" + options.text());
                        System.out.println("  ,題目答案:" + answer.text());
                    }
                }
            }
            System.out.println("Result---------------------End");

        return toAjax(1);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章