1. 程式人生 > 實用技巧 >使用Jsoup和htmlunit爬取動態網頁

使用Jsoup和htmlunit爬取動態網頁

  在對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的程式碼了。