大数跨境
0
0

JAVA实现网络爬虫的一些工具

JAVA实现网络爬虫的一些工具 曼昂网络爬虫
2015-10-30
0
导读:关于网络爬虫中的数据下载实现有很多种,在JAVA中,可以通过底层的技术自己编程实现,也可以利用一些开源工具包来快速实现,主要根据自己的技术水平和对效率、实用性等的要求来选择合适的技术

实现HTTP协议下载的方法

  1. line-height: 26px; white-space: normal; background-color: rgb(255, 255, 255);">基于Socket通信编写爬虫,这是相对最低层的方式,它可以完全控制Input/Output等,但对编程水平有很大考验,一般为了简单其鉴,多是基于第三方封装的网络包来做,而非直接基于socket编程。(这种要求自己通过网络编程去实现HTTP协议访问,要求对协议有很深的理解,而且对编程水平要求很高)

  2. 基于HttpURLConnection类编写爬虫,这是java.net包中为解决网络通信封装的核心类,它的底层也是基于socket实现。它可以方便控制,但代码依然偏大,作为学习和测试等很好,但做项目时并不是很好的选择。

  3. 基于apache的HttpClient包编写爬虫,这是目前java程序员编写网络爬虫首选的方案,版本更新、社区资源、易用性等都不错,是初学者和专业程序员都应该掌握的(该工具对http客户端封装的很好,也很实用,对处理http的访问是很好的工具)。

  4. 基于phantomjs之类的无头(无界面)浏览器做二次开发实现爬虫目的,webkit也是不错的选择,但它为c/c++编写调用起来较方便,但被java来调用还要编译dll、jna之类的比较烦锁,所以很少有java程序员调用直接用webkit内核做爬虫。而phantomjs在webkit基础之上提供了简明、易用的javascript api接口,成为很多java程序员的爬虫利器,更多细节可参考本博客的前几篇博文中有关于phantomjs的一个专门讲解,并可以在文章开头提到的群内获取相应的二次开发的爬虫工具。

  5. 说到无头浏览器,必须要说到htmlunit包,它是java基于Rhinojs的js引擎实现的无头浏览器,其时间较长知名度较高,但易用性、稳定性都比较弱,所以慢慢被ITers给抛弃了,如果不拿它做爬虫,而拿它做测试,还是个不错的利器。

  6. casperJs是基于phantomjs做的二次开发,主要是针对一些phantomjs的api二次封装,易用程序再次提高很大比例,但作为学习和开发我选择了phantomjs,各有所好,可以多方尝试。

  7. 基于Selenium或是WebDriver之类的有头(有界面)浏览器做爬虫,用java基于二者之类的库,可以直接操作浏览器,当然该浏览器肯定是所在的主机已经安装完成,其效果是跟用户的行为一模一样的去进行浏览器操作,从而在程序处拿到各相关的数据进行解析、存储等达到爬虫的效果。


各种方法的优劣对比

1. 爬虫效率

上边所述的基于sockiet、httpurlconnection、httpclient等来做的执行效率显然要高于基于浏览器,原因在于它少去了加载一些无用的图片、js等之类的资源,最大限制的直接获取想要得到的数据。

而相反基于浏览器的爬虫,不管是无头还是有头,它们都基于一次请求所引起的一系统URL发出请求,即像浏览器一样的去加载资源,两者的区别主要在于有没有界面去展示出来,这一点对资源、效率的影响很大。鉴于此,无头浏览器的效率是要高于有头浏览器的。

2. 资源占用

跟爬虫效率的原因相似,因为加载的东西少,所占的内存、cpu等都会少很多,所以依然是不基于浏览器的占优。

3. 抓包分析代价

像前三者,都是要了解了整个的所要抓取的站点的URL请求流的过程,所以抓包分析的代价是很高的,复杂度和难度跟站点的设计成正比,关于抓包分析可以参考本博客的前边几篇博文,有相关专门介绍。

而基于有头或无头的浏览器,就要省很多事,它是最大限制的去模拟人的,所以你只需要知道入口、出口等就可以了,中间的过程,可以通过自身提供的回调函数去调用等,相对要简单很多,这也是很多人基于phantomjs做二次开发爬虫,主要是因为简洁、开发效率高。


【声明】内容源于网络
0
0
曼昂网络爬虫
我们是程序员开发者联盟,利用业余时间提供网络爬虫软件定制、微站、H5、网站等各类软件开发服务,有意者请留言!
内容 96
粉丝 0
曼昂网络爬虫 我们是程序员开发者联盟,利用业余时间提供网络爬虫软件定制、微站、H5、网站等各类软件开发服务,有意者请留言!
总阅读4
粉丝0
内容96