伪分布式网络爬虫框架的设计与自定义实现(一)

【项目愿景】系统基于智能爬虫方向对数据由原来的被动整理到将来的主动进攻的转变的背景下,将赋予”爬虫”自我认知能力,去主动寻找”进攻”目标。取代人工复杂而又单调的重复性工做。可以实如今人工智能领域的某一方向上独当一面的做用。java

【项目进展】项目一期基本实现框架搭建,对数据的处理和简单爬取任务实现。python

【项目说明】为了可以更好理解优秀框架的实现原理,本项目尽可能屏蔽优秀开源第三方jar包实现,自定义实现后再去择优而食,造成对比。git

【设计原则】依据形式跟进新技术,不断积累在不一样业务场景下对各个开源技术的驾驭能力github

【项目规划】算法

第一期  实现整个项目框架的搭建以及基础知识的积蓄!编程

第二期  彻底实现爬虫在网络领域的各类需求运做数组

第三期  利用框架在特定领域内获取指定数据量后,经过”爬虫”自动批量处理海量数据,从中搜集(挖掘)有用数据或者经过各类识别技术(模式识别、图片识别、语音识别等)实现数据自动收集并高效化整理!跳转到第4、五期网络

第四期  平台框架升级,利用现有成熟数据处理以及数据可视化技术对平台相应功能点进行生产化(所谓生产话改造是指可以利用成熟框架快速适应生产化需求)改造。[成熟技术有Hadoop\Spark\Redis等优秀的各个方面的框架或技术、R语言],(注意:而且尽可能使用开源框架,目的是研究优秀框架的实现源代码)数据结构

第五期  平台语言升级,由于数据处理方向python有着优秀的性能,故须要将开发好的平台部分功能用合适的语言实现[注意:平台在真正的运行过程中一定存在多方面的性能问题,要不断的反思解决问题的方案,结合不一样语言的优点和所作的业务逻辑的差异,采用不一样的处理方式]架构

第六期  移动端开发,自选方向......

第七期  采用机器学习等技术深度解析数据中的自动化问题,是的数据史前时代的被动整理,成为将来数据的自动清洗,将成熟的识别技术应用到平台开发当中。

【项目设计忠告】

本着实现任何功能从jdk甚至更为基础的代码训练出发,使本身更加了解底层的实现细节,从而在尽量短的时间里将jdk的80%可以实现自由使用,java只是与计算机沟通的一种工具或是手段!在编程过程中自我实现某些功能一定不是最优的,你就要学会从中寻找利于更为合适的和计算机沟通的方式,不一样语言又不一样的优点,要在不断地实践中摸索,发挥出不一样语言的优点出来!

若是说 Java 是自动档轿车,C 就是手动档吉普。数据结构呢?是变速箱的工做原理。你彻底能够不知道变速箱怎样工做,就把自动档的车子从 A 开到 B,并且未必就比懂得的人慢。写程序这件事,和开车同样,经验能够起到很大做用,但若是你不知道底层是怎么工做的,就永远只能开车,既不会修车,也不能造车。若是你对这两件事都不感兴趣也就罢了,数据结构懂得用就好。但若你今生在编程领域还有点更高的追求,数据结构是绕不开的课题。

Java 替你作了太多事情,那么多动不动还支持范型的容器类,加上垃圾收集,会让你以为编程很容易。但你有没有想过,那些容器类是怎么来的,以及它存在的意义是什么?最粗浅的,好比 ArrayList 这个类,你想过它的存在是多么大的福利吗——一个能够随机访问、自动增长容量的数组,这种东西 C 是没有的,要本身实现。可是,具体怎么实现呢?若是你对这种问题感兴趣,那数据结构是必定要看的。甚至,面向对象编程范式自己,就是个数据结构问题:怎么才能把数据和操做数据的方法封装到一块儿,来造出 class / prototype 这种东西?
     此外,很重要的一点是,数据结构也是通向各类实用算法的基石,因此学习数据结构都是提高内力的事情。在全程设计的过程中要不断坚持从错误中学习,有位名人曾说,我从别人的错误里去学习,而不是一直去学习别人是怎么成功的!这也就是说,咱们要这爱bug,调试bug就是在自我超越中成长!

【架构及核心模块实现】

  1. 爬虫采用心跳机制——便于对任务状态进行监控和减轻任务调度器负担。
  2. 爬虫获取资源后统一格式后传输给处理模块,仿hadoop的MR实现——更加有效利用计算机资源。
  3. 依据任务数据特征不一样动态选择数据存储技术——为框架可扩展性留出空间。
  4. 利用对Map的封装实现PO容器(单例模式)——存放系统中具备惟一性的键值对参数,方便调用。
  5. 数据源和线程管理上采用链接池技术——以便资源的合理利用。

【分布式爬虫架构原理图】

 

【项目地址】https://github.com/chenkai1100/SpiderFrame/

欢迎各路大神批评指正。

相关文章
相关标签/搜索