近期需要抓取一些数据,而这些数据都是需要从后台进行异步请求获取的。故图个方便使用了HtmlUnit这个开源工具进行开发。现整理一下其优劣点:
优点:
1.可以模仿浏览器对服务器进行请求,能够抓取几乎网络上浏览器能看到的所有信息。
2.用户操作接口比较便捷,比如click、focus等元素事件可直接在获取DOMElement等元素对象后直接使用。
3.上手比较快,按照用户操作浏览器习惯,逻辑清晰、代码易开发。
4.抓取成功率高,不易被网站拉入黑名单。
缺点:
1.获取元素对象方式不够丰富,如没有根据属性和值以及class等获取元素集的接口。
2.操作速度比较慢,当然这也恰好可以不被有反爬虫机制的网站拉入黑名单。
对于缺点1,因此一般可以利用HtmlUnit和Jsoup组合进行开发,Jsoup操作可以仿照jQuery进行,获取元素接口丰富。
但是从HtmlUnit的元素对象可以根据asXml()转化为String类型,然后根据Jsoup的 Jsoup.parse(String html)方法进行转化。反之则不可(也可能自己没有深入学习,如有错误敬请指出。)
对于缺点2,则是几乎不能避免,浏览器请求服务器后台也需要时间,为了提升抓取的成功率,在请求前,设置:.client.setAjaxController(new NicelyResynchronizingAjaxController());以及在请求数据的操作后添加:client.waitForBackgroundJavaScript(10000);