java爬虫 httpclient htmlunit selenium 比较


简单介绍。

1 httpclient

    httpclient 是 HttpClient 是 Apache Jakarta Common 下的子项目 ,支持常用的各种协议,相对比较底层,很多java项目的互联网编程都是依赖于该包 。

2 htmlunit

  相当与一个没有ui的浏览器,本身就是对httpclient进行封装。

3 selenium

   这个最早是基于firfox的自动化测试软件,现在也支持其他的浏览器,比如ie,chrome 等,同时提供了多语言的接口,如python,java 等,其功能是完全模仿浏览器行为,对于爬虫而言是最后的利器。


区别

    可以说如果你的水平如果“足够好”,httpclient可以满足你的所有要求,因为爬虫本质上就是发请求,收结果,只要你写的请求报文和正常情况下发出去的是一样,你就可以收到正确的结果,而httpclient 完全可以自定义报文,那为什么还要使用htmlunit?

   而且由于htmlunit 本身是对httpclient的封装,加上其有对于js,css等的加载,其运行速度相对要比httpclient 慢的多,看起来似乎没有优势。其实不然,导致htmlunit慢的主要原因就是在于对于js,css的加载  。很多时候这个是非常必要的。

       使用f12 打开浏览器的开发者工具你会发现,有的网页生成的dom 树和你在查看网页源代码里看到的代码并不一样,原因是dom树是在源代码的基础上用js渲染了一遍。要想得到这个渲染后的dom树,只用httpclient是不行的,他只能看到源代码,这个时候就得使用htmlunit了。除此之外,htmlunit得到的htmlpage对象还可以执行js,通过这种方式,你可以获得js中保存在变量里的值,或者可以执行页面里的函数,可以完成常用的加密(模拟登陆时)等功能。

  selenium相对而言则更暴力,他对于每一个浏览器提供不同的插件(htmlunit的也有),可以完全模仿人对于浏览器操作,在使用selenium时,你真的可以看到一个个页面的打开关闭,看到鼠标的移动,文字的键入,所以用selenium ,只要是人能在操作的,他都能做到,缺点就是速度是最慢的,而且你还得在电脑里安装相应的浏览器,要有专门的驱动程序(而且对于linux支持也不好)。

如何选择

      从开发效率来说,应该是selenium>htmlunit>httpclient (htmlunit 对于js的支持不是特别稳定,有时候也会莫名其妙报错),但是代码运行的速度则是反过来的,尤其js加载和页面的仿真,慢的真的不是一点半点,所以在可以的情况下,尽量使用数度快的工具吧,比如你就是爬一个静态页面,用httpclient就很好,反之如果js很简单就用htmlunit 或者找到相应的js文件,用js引擎去执行,实在没办法了,再考虑selenium吧。至于3个具体工具怎么用,敬请期待

 

你可能感兴趣的:(java爬虫 httpclient htmlunit selenium 比较)