標籤:body cli span roo out 解決方案 ble trace auto
最近在抓資料,一般的網頁資料抓取相對容易一些,今天在抓電視貓的節目單,發現有些資料時抓取不到的,Java端得到的HTML檔案裡面沒有某一段代碼,查了很多資料,發現說是js動態產生的資料,無法直接抓取,有一種解決方案是利用找到ajax請求地址和參數,重新抓取,該方法存在一個問題,就是當參數被加密過時,該方法就不好用了,所以,這裡用了一個辦法,就是利用HTMLunit來抓取(可以利用jsuop來處理HTML檔案),jar包:http://download.csdn.net/detail/joy460154849/9822849(HTMLunit所用到的jar包全部匯入後,稍微調整一下,因為有些有重複匯入或者版本問題)代碼如下:
public static String getHtml(String url){ // 類比一個瀏覽器 @SuppressWarnings("resource") WebClient webClient = new WebClient(); //webclient參數載體 WebClientOptions clientOptions = webClient.getOptions(); // 設定webClient的相關參數 clientOptions.setJavaScriptEnabled(true); clientOptions.setCssEnabled(false); webClient.setAjaxController(new NicelyResynchronizingAjaxController()); clientOptions.setTimeout(35000); clientOptions.setThrowExceptionOnScriptError(false); // 類比瀏覽器開啟一個目標網址 HtmlPage rootPage = null; try { rootPage = webClient.getPage(html); } catch (FailingHttpStatusCodeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //儲存頁面 //rootPage.save(new File("/home/share/Test/1")); //body html資訊 HtmlElement htmlElement = rootPage.getBody(); String xmlContent = htmlElement.asXml(); return xmlContent; }
抓取js動態產生資料