在對http://zkgg.tjtalents.com.cn/newzxxx.jsp這個網頁爬取內容時,如果只使用Jsoup進行解析的話,起內部的a href標簽內容無法獲取到。
但是實際上通過
Document doc = Jsoup.connect(url).get();
獲取到的文檔只是newzxxx.jsp中respose的內容。
實際我們想要的內容通過js加載得到的。
function query(){ $("formzx").fid.value = "C09.01.01.05"; $("formzx").set('send',{ url: 'MainServlet.action', onRequest: function(){ }, //成功的回調函數 onSuccess: function(responseText){ $('listspan').innerHTML = responseText; }, //失敗的回調函數. 404. 500. 以及返回JSON串success為false時執行 onFailure: function(responseText){ $('listspan').innerHTML = responseText; } }); $("formzx").send(); }
所以這種情況我們可以使用htmlunit來模擬瀏覽器,並且等待js加載完畢后,再讀取整個頁面。
public String getPageWaitJS (String url) throws IOException { WebClient webClient = new WebClient(); webClient.getOptions().setJavaScriptEnabled(true); //啟用JS解釋器,默認為true webClient.getOptions().setCssEnabled(false); //禁用css支持 webClient.getOptions().setThrowExceptionOnScriptError(false); //js運行錯誤時,是否拋出異常 HtmlPage page = webClient.getPage(url); webClient.waitForBackgroundJavaScript(3*1000); String pageXml = page.asXml(); //以xml的形式獲取響應文本 return pageXml; }
這樣的話就能夠獲取全部的html頁面,之后再使用Jsoup來對頁面進行解析即可,這里就不放上Jsoup的代碼了。