本文提供的所有jar非maven引入地址。需自行查找pom引入方式。
爬取靜態頁面
爬取靜態頁面基本包:htmlunit基本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());
}
}