使用Jsoup和htmlunit爬取動態網頁
阿新 • • 發佈:2020-07-24
在對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的程式碼了。