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方便抓取,但是由于是模拟了网页点击事件,所有响应回来的内容会很臃肿,如果需要的数据量小,会有点效率低。
参考:http://www.haohaoblog.com/?p=1327
<iframe id="iframe" frameborder="0" style="border:0px;width:100%;height:1000px" scrolling="no" src="http://gk360b.ks3-cn-center-1.ksyun.com/20151220173743.8fJ2YWbJA9.html"/>
本文出自 “塞上名猪” 博客,请务必保留此出处http://zuohao1990.blog.51cto.com/6057850/1726548
原文地址:http://zuohao1990.blog.51cto.com/6057850/1726548