java爬蟲工具htmlunit爬取靜動態示例(附帶親測可用所有jar包)

本文提供的所有jar非maven引入地址。需自行查找pom引入方式。

 

爬取靜態頁面

爬取靜態頁面基本包:htmlunit基本jar包

可能有的還需要這兩個包:

jetty-websocket.jar

jsoup.jar

 

導入以上所有jar包之後來hello word一下。

public static void main(String[] args) throws IOException {
    // 實例化Web客戶端
    WebClient webClient = new WebClient();
    // 爬取https網站需要設置爲true
    webClient.getOptions().setUseInsecureSSL(true);
    // 解析獲取頁面
    HtmlPage page = webClient.getPage("https://www.baidu.com");
    // 獲取Html
    System.out.println("網頁html:" + page.asXml());
    System.out.println("====================");
    // 獲取文本
    System.out.println("網頁文本:" + page.asText());
}

 

到這爲止,上述的功能可以扒取靜態頁面。完全沒問題。

 

爬取動態頁面

爬取動態頁面基本包:htmlunit爬取動態頁面jar包

 

爬取動態界面示例demo

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;

import java.util.logging.Level;

public class GetSongDemo {

    @Test
    public void show() throws Exception {
        readHtml("https://y.qq.com/n/yqq/song/000VWfXv0lIJyw.html");
    }

    public static void readHtml(String url) throws Exception {
        // 不顯示異常日誌
        LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",
                "org.apache.commons.logging.impl.NoOpLog");
        java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit")
                .setLevel(Level.OFF);
        java.util.logging.Logger.getLogger("org.apache.commons.httpclient")
                .setLevel(Level.OFF);
        WebClient wc = new WebClient(BrowserVersion.BEST_SUPPORTED);
        wc.setJavaScriptTimeout(10000);
        //接受任何主機連接 無論是否有有效證書
        wc.getOptions().setUseInsecureSSL(true);
        //設置支持javascript腳本
        wc.getOptions().setJavaScriptEnabled(true);
        //js運行錯誤時不拋出異常
        wc.getOptions().setThrowExceptionOnScriptError(false);
        //設置連接超時時間
        wc.getOptions().setTimeout(100000);
        wc.getOptions().setDoNotTrackEnabled(false);
        //當HTTP的狀態非200時是否拋出異常
        wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
        wc.getOptions().setActiveXNative(false);
        //是否啓用CSS
        wc.getOptions().setCssEnabled(false);
        //很重要,設置支持AJAX
        wc.setAjaxController(new NicelyResynchronizingAjaxController());
        HtmlPage page = wc.getPage(url);
        Thread.sleep(10000);
        System.out.println(page.asXml());
        System.out.println(page.asText());
    }

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章