當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容
生活随笔
收集整理的這篇文章主要介紹了
htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Htmlunit是一款模擬瀏覽抓取頁面內(nèi)容的java框架,具有js解析引擎(rhino),可以解析頁面的js腳本,得到完整的頁面內(nèi)容,特殊適合于這種非完整頁面的站點(diǎn)抓取。
下載地址:
https://sourceforge.net/projects/htmlunit/files/htmlunit/
?
maven地址:
<dependency><groupId>net.sourceforge.htmlunit</groupId><artifactId>htmlunit</artifactId><version>2.18</version></dependency>?
?
代碼的實現(xiàn)非常簡單,主要分為兩種常用場景:
?
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.創(chuàng)建連接client WebClient webClient = new WebClient(BrowserVersion.CHROME); //2.設(shè)置連接的相關(guān)選項 webClient.getOptions().setCssEnabled(false); webClient.getOptions().setJavaScriptEnabled(false); webClient.getOptions().setTimeout(10000); //3.抓取頁面 HtmlPage page = webClient.getPage(url); System.out.println(page.asXml()); //4.關(guān)閉模擬窗口 webClient.closeAllWindows(); } /** * 功能描述:抓取頁面時并解析頁面的js * @param url * @throws Exception */public void crawlPageWithAnalyseJs(String url) throws Exception{ //1.創(chuàng)建連接client WebClient webClient = new WebClient(BrowserVersion.CHROME); //2.設(shè)置連接的相關(guān)選項 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.將頁面轉(zhuǎn)成指定格式 webClient.waitForBackgroundJavaScript(10000); //等侍js腳本執(zhí)行完成 System.out.println(page.asXml()); //5.關(guān)閉模擬的窗口 webClient.closeAllWindows(); } } 主要關(guān)注webClient的幾個選項配置, webClient.getOptions().setJavaScriptEnabled(true); //需要解析js webClient.getOptions().setThrowExceptionOnScriptError(false); //解析js出錯時不拋異常?
需要將這兩個開關(guān)打開才可以解析頁面的js,css的渲染默認(rèn)關(guān)掉就可以,因為爬蟲本身沒有界面,所以這塊不需要,即下面的配置: webClient.getOptions().setCssEnabled(false);?
?
htmlunit在解析js的時候也有可能失敗,這塊還沒有深入研究,后續(xù)使用遇到問題再記錄 抓取到的內(nèi)容默認(rèn)以xml形式獲得,即page.asXml(), 因為這樣可以通過jsoup去解析html頁面數(shù)據(jù),jsoup是一個比較方便簡潔的工具.?
總結(jié)
以上是生活随笔為你收集整理的htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Spring Boot 实战开发】第2
- 下一篇: AI需求强劲 AI芯片市场规模有望达到4