您的位置:首页 > 理论基础 > 计算机网络

关于网络爬虫技术的概述

2015-05-17 17:01 288 查看
自2012年7月份开始接触爬虫相关,不经意间对爬虫有了不少心得和总结,看到周围不少的同事和同学也在这块,发现很多共性的问题和很多的误区,今天特意总结出来,希望对后来者有所帮助。
一、综述
爬虫主要分两种,全网漫爬型和垂直型。漫爬型即像谷歌、百度之类,垂直类爬虫即像微博爬虫、淘宝类电商爬虫。它们的主要区别在于,前者为漫爬不精准爬虫,多用于舆情、概要性信息的应用,后者为精准爬虫,即对每个所爬的条目都要求准确无误,多用于行业领域应用,如微博营销、微博舆情、媒体数据精准分析挖掘等。
全网漫爬虫,包括著名java版的nutch、Heritrix等,垂直型的开源爬虫很少,主要是因为通用不强,而且要经常维护,故开源的价并不高,像微博爬萌开源的微博爬虫是其中一个,质量并不是上佳,但作法很值得敬佩和学习。
二、系统设计
爬虫技术,有人会认为相对比较窄,但实际做起来就会发现其实包含的内容是非常庞杂的,尤其是作为一个爬虫系统,而非仅仅是一个爬虫小模块。作为系统来讲,它主要包括提交任务的UI接口层、任务调度层、网络爬取层、数据解析层、数据持久化层,共5个主要层,再循环至任务调度层的过程。
在五个层的设计中,其难点在于乱码解决、多线程设计、爬取的各参数的灵活配置、反爬代理等4个难点,所以一个好的爬虫系统应该做到5+3这8点才算合理,其中个人体会比较身的就是nutch,各方面比较灵活、高效、扩展性好,自nutch2.x以后新增的Gora接口,使其持久化更加强大,作为爬虫学习的初学者和进阶者,均可以用nutch的不同版本,包括1.2、1.6、1.7、2.2等来学习爬虫技术。
三、具体技术
个人主攻java相关,仅以java为例,其实像c/c++、python等也相关无几。
典型的技术构成为:http协议相关+java se+httpclient+jsoup(httpparser)。
http协议相关,指在爬虫过程中对最为主流的http网址的内容的抓包及参数分析,最为主要的参数部分要对http协议相对了解些,包括Url、HttpHeader、Get、Post、Cookie等4项。Url即为共认的Url网址。HttpHeader,指在http请求过程中,协带的各项header信息,如refer,host,encoding,返回的type等。 Get请求,即为在浏览器中看到的网址后边的参数部分,Post请求,即为数据提交的时候对数据保护和扩大数据提交量的一种数据的提交方式。Cookie,即为小甜饼,是服务器端向客户端写的信息,往往是为了提高客户端的使用体验而添加的,更关键的是要保持住客户端与服务器的连接状态。
Java Se: 程序设计语言,好的系统必须有扎实的编程水平,故不必多说,其重点在于常用高级类应用、IO流、多线程等。
HttpClient: 是开源的Apache的著名的java net编程第三方包,其实是对Java Net包的封状,目前已为4.3版本,更为精简易用,可以免去很多Http操作的细节操作,其核心为HttpUrlConnection的封装。
Jsoup:是近来较受欢迎的html解析器,比htmlparser更简单、易用、高效,故目前应用jsoup的人员急速上升,且与老牌的htmlparser对比优势明显,尤其是其选择器的应用,太过强大,很有吸引用,使人不得选择jsoup去解析httpclient得到的网页内容。
有了以上4个主要技术点,做爬虫会得心应手很多,入门者可以逐一学之,最后集成为爬虫。
四、总结
做爬虫系统和做别的系统很像,系统设计很关键,即层之间的衔接,要尽量高内聚、低耦合。好的系统几乎不可能一蹴而就,往往需要无数次重构与优化,这也是为什么像nutch、hadoop、lucene等如此优秀的开源项目的更新如此频繁,不能说不好,只能说能做的更好,所以无数的精英都乐此不疲的去完善优秀的项目,伟大的产生,都源于对细节的孜孜不倦的追求,希望国内的IT界也能出一些如上所述的优秀开源项目。

不知不觉11点过10分了,入睡去了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: