htmlunit爬蟲工具使用--模擬瀏覽器發送請求,獲取JS動態生成的頁面內容


Htmlunit是一款模擬瀏覽抓取頁面內容的java框架,具有js解析引擎(rhino),可以解析頁面的js腳本,得到完整的頁面內容,特殊適合於這種非完整頁面的站點抓取。

下載地址:

  https://sourceforge.net/projects/htmlunit/files/htmlunit/

 

maven地址:

        <dependency>
            <groupId>net.sourceforge.htmlunit</groupId>
            <artifactId>htmlunit</artifactId>
            <version>2.18</version>
        </dependency>

 

 

代碼的實現非常簡單,主要分為兩種常用場景:

  1. 解析頁面的js
  2. 不解析頁面的js

 

package cn.qlq.craw.httpunit;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
/**
 * httpunit爬蟲
 * @author liqiang
 *
 */
public class HttpUnitCraw {  
    
    public static void main(String[] args) throws Exception {  
        HttpUnitCraw crawl = new HttpUnitCraw();  
        String url = "http://qiaoliqiang.cn/";  
        System.out.println("----------------------抓取頁面時不解析js-----------------");  
        crawl.crawlPageWithoutAnalyseJs(url);  
        System.out.println("----------------------抓取頁面時解析js-------------------");  
        crawl.crawlPageWithAnalyseJs(url);
    }  
      
    /** 
     * 功能描述:抓取頁面時不解析頁面的js 
     * @param url 
     * @throws Exception  
     */ 
    public void crawlPageWithoutAnalyseJs(String url) throws Exception{  
        //1.創建連接client   
        WebClient webClient = new WebClient(BrowserVersion.CHROME);  
        //2.設置連接的相關選項  
        webClient.getOptions().setCssEnabled(false);  
        webClient.getOptions().setJavaScriptEnabled(false);  
        webClient.getOptions().setTimeout(10000);  
        //3.抓取頁面  
        HtmlPage page = webClient.getPage(url);  
        System.out.println(page.asXml());  
        //4.關閉模擬窗口  
        webClient.closeAllWindows();  
    }  
      
    /** 
     * 功能描述:抓取頁面時並解析頁面的js 
     * @param url 
     * @throws Exception  
     */
    public void crawlPageWithAnalyseJs(String url) throws Exception{  
        //1.創建連接client   
        WebClient webClient = new WebClient(BrowserVersion.CHROME);  
        //2.設置連接的相關選項  
        webClient.getOptions().setCssEnabled(false);  
        webClient.getOptions().setJavaScriptEnabled(true);  //需要解析js  
        webClient.getOptions().setThrowExceptionOnScriptError(false);  //解析js出錯時不拋異常  
        webClient.getOptions().setTimeout(10000);  //超時時間  ms  
        //3.抓取頁面  
        HtmlPage page = webClient.getPage(url);  
        //4.將頁面轉成指定格式  
        webClient.waitForBackgroundJavaScript(10000);   //等侍js腳本執行完成  
        System.out.println(page.asXml());  
        //5.關閉模擬的窗口  
        webClient.closeAllWindows();  
    }  
} 
 
主要關注webClient的幾個選項配置,
webClient.getOptions().setJavaScriptEnabled(true);  //需要解析js  
webClient.getOptions().setThrowExceptionOnScriptError(false);  //解析js出錯時不拋異常  

 

 
        
需要將這兩個開關打開才可以解析頁面的js,css的渲染默認關掉就可以,因為爬蟲本身沒有界面,所以這塊不需要,即下面的配置:
webClient.getOptions().setCssEnabled(false);  

 

 

 
 
htmlunit在解析js的時候也有可能失敗,這塊還沒有深入研究,后續使用遇到問題再記錄
 
抓取到的內容默認以xml形式獲得,即page.asXml(), 因為這樣可以通過jsoup去解析html頁面數據,jsoup是一個比較方便簡潔的工具.

 


免責聲明!

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



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