爬蟲中使用HttpClient發送ajax請求,並處理返回的JSON字符串

發送ajax請求和一般請求無異,只是在請求頭信息中加上一條:

httpGet.addHeader("X-Requested-With","XMLHttpRequest");

下面是在目標網頁上的ajax請求源碼

<script>    
    Do(function(){
        $("html").delegate(".a_search_more","click",function(c){
            c.preventDefault();
            if(b.hasClass("processing")){
                return
            }
            var a=b.data();
            b.attr("title",b.text()).text("加載中...");
            $.get("/j/search",a,function(d){
                if(d.r){
                    b.text("加載失敗...");
                    return
                }
                b.removeClass("processing");
                b.text(b.attr("title"));
                $(d.items.join("")).insertBefore(b.parent());//根據此行,基本確定返回的是json字符串
                if(!d.more){
                    b.hide()
                }
            })
        });
        ......
    }  
</script>

確定返回的是json字符串後,接下來要對json字符串進行處理。java中關於json處理的jar包比較多的是json-lib-XXX.jar,這個包到jdk1.5之後就沒有見到新的版本了。所以我使用的是alibaba出的fastjson。
下面貼出返回的json字符串代碼:

{"total":249,"more":true,"limit":20,"items":["\n  \n  <div class=\"result\">\n   ... ...   </div>\n        <p>吳邪戴上了三叔的人皮面具,以三叔的身份整頓了三叔在長沙的產業,三叔手下盤口的馬仔無不歸順。吳邪、潘子和小花等人兵分三路,從杭州、長沙和北京出發前往廣西。在廣...</p>\n    </div>\n  </div>\n"]}

可以看到,大量顯示的數據都在items中,接下來

JSONObject json = JSON.parseObject(html);         //將JSON類型的String語句轉爲JSON Object           
JSONObject jItem = json.getJSONObject("items");

上文中,html爲返回的json字符串。這樣就得到了items的值。

["\n  \n  <div class=\"result\">\n    ... ...   </div>\n  </div>\n"]

但是,這其中包含換行符和轉義字符“\”,還有首尾的中括號,雙引號。

String items = j.toString();
items = items.replace("\\n", "");   
items = items.replace("\\","");
items = items.substring(2, items.length()-2);
Document docAdd = Jsoup.parse(items);   //解析成爲document
results = docAdd.select("div.result");  //得到Elements,成功解析
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章