#java爬蟲gecco支持htmlunit java爬蟲gecco發佈了1.0.5版本,增長了對htmlunit的支持。htmlunit是一款開源的java 頁面分析工具,讀取頁面後,能夠有效的使用htmlunit分析頁面上的內容。項目能夠模擬瀏覽器運行,被譽爲java瀏覽器的開源實現。這個沒有界面的瀏覽器,運行速度也是很是迅速的。htmlunit採用的是rhino做爲javascript的解析引擎。 ##使用方法javascript
-
下載css
<dependency> <groupId>com.geccocrawler</groupId> <artifactId>gecco-htmlunit</artifactId> <version>x.x.x</version> </dependency>
##Demo JD的商品詳情信息裏的價格的信息是經過ajax異步請求而來的,以前是利用@Ajax註解的方式實現的。這裏用htmlunit來自動完成ajax請求。html
@Gecco(matchUrl="http://item.jd.com/{code}.html", pipelines="consolePipeline", downloader="htmlUnitDownloder") public class JDDetail implements HtmlBean { private static final long serialVersionUID = -377053120283382723L; @RequestParameter private String code; @Text @HtmlField(cssPath=".p-price") private String price; @Text @HtmlField(cssPath="#name > h1") private String title; @Text @HtmlField(cssPath="#p-ad") private String jdAd; @HtmlField(cssPath="#product-detail-2") private String detail; public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getJdAd() { return jdAd; } public void setJdAd(String jdAd) { this.jdAd = jdAd; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public static void main(String[] args) throws Exception { HttpRequest request = new HttpGetRequest("http://item.jd.com/1455427.html"); request.setCharset("GBK"); GeccoEngine.create() .classpath("com.geccocrawler.gecco.htmlunit") //開始抓取的頁面地址 .start(request) //開啓幾個爬蟲線程 .thread(1) .timeout(1000) .run(); } }
##優缺點 使用htmlunit確實能省去不少工做,可是htmlunit也存在不少弊端:java
一、效率低下,使用htmlunit後,下載器要將全部js一併下載下來,同時要執行全部js代碼,下載一個頁面有時須要5~10秒。ajax
二、rhino引擎對js的兼容問題,rhino的兼容性仍是存在很多問題的,上述demo就有不少js執行錯誤。若是你們在抓取時不想看到這些error日誌輸出能夠配置log4j:chrome
log4j.logger.com.gargoylesoftware.htmlunit=OFF
三、使用selenium也能夠達到相似目的,selenium自己並不解析js,經過調用不一樣的瀏覽器驅動達到模擬瀏覽器的目的。selenium支持chrome、IE、firefox等多個真實瀏覽器驅動,也支持htmlunit做爲驅動,還支持PhantomJS這種js開發的驅動。瀏覽器
driver類型 | 優勢 | 缺點 |
---|---|---|
真實瀏覽器driver | 真實模擬用戶行爲 | 效率、穩定性低 |
HtmlUnit | 速度快 | js引擎(Rhinojs)不是主流的瀏覽器支持的,故對js支持的不夠好 |
PhantomJS | 速度中等、模擬行爲接近真實 | 不能模擬不一樣/特定瀏覽器的行爲 |