java爬蟲gecco支持htmlunit

#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 速度中等、模擬行爲接近真實 不能模擬不一樣/特定瀏覽器的行爲
相關文章
相關標籤/搜索