使用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的代碼了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM