从事爬虫方向开发立刻也将近两年时间了,今天基友问我关于爬虫的架构设计问题.其实这么久也想总结一下本身的整个开发的过程,架构的设计问题..对本身进行一些总结..仅做参考.javascript
1.爬虫的分类 :
java
对于我来讲,爬虫分为两类:
数据库
须要载入配置文件的爬虫与不须要载入配置文件的爬虫.架构
其实也就是人们常说的垂直型爬虫跟宽度(深度)遍历爬虫.优化
2.爬虫的架构:
网站
1.宽度遍历爬虫.
搜索引擎
作过SEO的朋友大概都知道,若是一个网站须要百度可以尽快的抓取,那么仅仅优化关键词,提升权重等都是比较简单的优化,爬虫友好性须要网站在建设的时候就考虑到爬虫的友好.如:标签设置,架构设计...
插件
宽度遍历爬虫就是宽度抓取,网站在设计的时候就直接是按照宽度设计...不太好理解,也不太好解释... 大概的意思就是深度少...如; 进入首页以后---就能看到各个分类,点击分类就能看到分类列表---点击分类列表就是内容...减小与用户的交互,也让爬虫能直接找到重点.
架构设计
各大搜索引擎应用的都是宽度遍历方式来抓取数据.不信你能够建一个网站.设置十几级深度..首页-分类--再分类---再分类以后十几级以后才能看到内容..你能够试一下,爬虫抓取的效果怎么样.设计
宽度遍历爬虫比较常见的不少,Nutch、Heritrix等都是宽度遍历爬虫的典型表明,比较经常使用的就是Nutch.
2.垂直型爬虫
垂直型爬虫我我的感受是最近几年才被提出的,垂直型爬虫关注内容与准确还有效率.比较常见的就是舆情项目,财经项目等.仅仅抓取到有效有用的数据,而且在爬虫 抓取之初就可以把抓取到的内容进行简单的处理: 如.提取标题,内容,时间等.
垂直型爬虫注重效率,相对来讲.一个网站有十万个连接,宽度遍历爬虫须要把十万个连接都下载到你的数据库中,而垂直型爬虫只须要下载对你有用的数据,也许仅有几千或者一万,若是垂直型爬虫抓取这么点数据比宽度遍历爬虫抓取的还慢,那么这个项目在这点上就是个垃圾.
垂直型爬虫相对于宽度遍历爬虫又一个特别的地方是:宽度遍历爬虫是可定制的,根据某个网站订制..好比:抓取QQ空间,新浪微博等,都是须要登录的...或者是有些网站的内容须要javascript来调用才能显示,那么就须要javascript解析引擎来保证抓取的质量.插件定制是我对垂直型爬虫作的又一个定义
3.爬虫的设计
爬虫想起来复杂作起来其实一点也不复杂,简单来讲就是网站连接发现,网站链接处理,连接下载---继续发现连接...
进入一个网站首先须要提供这个网站的网址.例如: http://www.baidu.com 那么获得百度以后就须要下载该页面,下载页面以后能发现几个连接. http://news.baidu.com http://music.baidu.com 等, 得到这几个连接以后就是打开这几个连接,继续得到新的连接....一直持续下去...
若是,仅仅是这样,那么爬虫就会'死'在这个网站...好比.在其余页面也会找到http;'//www.baidu.com 那么再进入这里.再一直这样循环...就真的死了..因此须要对连接进行有效的管理,去重等... 在这个抓取过程当中,某个连接已经抓取过了,那么在连接发现,或者是连接下载的时候就能够直接把这个连接去掉,不进行下载.那么以后发现的连接会愈来愈少,那么整个网站的抓取也就会有个结束!
OK,表达能力不是很好,简单总结,不管编写什么类型的爬虫,都须要这些: 连接发现--链接管理--连接下载-- 那么也就获取到内容了.
4.垂直型爬虫的垂直?
垂直型爬虫在刚开始作爬虫的时候我就再想为何叫垂直型爬虫.如今写了那么久也不是很理解,我大概以为垂直的意思是垂直获取,就好像是有目的有目标的直接去拿想要的东西,因此垂直...!
垂直型爬虫跟普通型的爬虫不一样的地方在于有目的性.相对于其余爬虫,目的性很是的明确.就好象我要拿一篇文章,其余的东西都不要,那么垂直型爬虫能够知足你!
垂直型爬虫设计跟宽度遍历爬虫的设计区别也不是很大,同样.... 连接发现--链接管理--连接下载. 不过大部分的垂直型爬虫多了一个 信息提取 提取出所需的内容是对垂直型爬虫最大的考研,也是垂直型爬虫最重要的功能. 因此在垂直型爬虫上应该体现的是 连接发现-连接管理-连接下载等.!
我的认为:垂直型爬虫更加适用于企业级,由于企业级所需资讯内容明确.并且垂直型爬虫更加的小型,便于管理.实现功能定制化.