htmlunit 抓取网页(和java自带的网络API进行结合,怎么做?)
优采云 发布时间: 2022-01-05 04:01htmlunit 抓取网页(和java自带的网络API进行结合,怎么做?)
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根据名称获取指定的标签(HtmlElement),可以为标签设置类型。
select("") 方法经常用在 Document 对象中。通过这个方法可以得到一个特定的Element,然后通过解析内容就可以得到需要的数据。
HtmlUnit方便抓取,但是因为它模拟了网页点击事件,所以所有的响应内容都会变得臃肿。如果需要的数据量很小,效率会有点低。