HtmlUnit将HttpClient和java自带的网络API进行结合,使抓取数据变的更加容易、更加易于操作。HtmlUnit的底层还是封装了HttpClient,但是经过封装后,解析出来的内容更像一个网页,而不是抽象的请求和响应,所以更加便于开发人员上手。

// [1] new一个WebClient,在其中定义一种浏览器
WebClient webClent = new WebClient(BrowserVersion.FIREFOX_17);
// [2] 设置网页解析的内容
WebClientOptions options=webClent.getOptions();
options.setCssEnabled(false);
options.setJavaScriptEnabled(true);
options.setActiveXNative(false);
options.setAppletEnabled(false);
options.setRedirectEnabled(true);
options.setThrowExceptionOnFailingStatusCode(false);
options.setThrowExceptionOnScriptError(false);
options.setDoNotTrackEnabled(false);
options.setGeolocationEnabled(false);
// [3] 访问指定的页面,并将其赋予HtmlPage
HtmlPage htmlPage=webClent.getPage(url);
// [4] 获得的HtmlPage并不易于阅读,所以有需要可以通过Jsoup将其转换为Document对象
Document document = Jsoup.parseBodyFragment(htmlPage.asXml());

// [5]关闭
webClent.closeAllWindows();

HtmlPage 对于获取按钮后赋值并操作点击事件非常方便,常用的方法getElementByName,根据name获取指定标签(HtmlElement),type可以对标签设置。

Document 对象中经常用到select("")方法,通过这个方法可以获得具体的Element,然后通过解析其中的内容获得需要的数据。

HtmlUnit方便抓取,但是由于是模拟了网页点击事件,所有响应回来的内容会很臃肿,如果需要的数据量小,会有点效率低。


相关博文:使用HttpClient实现数据抓取 http://zuohao1990.blog.51cto.com/6057850/1728062