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

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

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

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

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

【项目规划】

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

第二期  完全实现爬虫在网络领域的各种需求运作

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

第四期  平台框架升级,利用现有成熟数据处理以及数据可视化技术对平台相应功能点进行生产化(所谓生产话改造是指能够利用成熟框架快速适应生产化需求)改造。[成熟技术有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/

欢迎各路大神批评指正。

时间: 2025-01-02 14:21:26

伪分布式网络爬虫框架的设计与自定义实现的相关文章

Python爬虫进阶一之爬虫框架概述

综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优秀的框架,先把这些框架用熟,可以确保能够应付一些基本的爬虫任务,也就是所谓的解决温饱问题,然后再深入学习它的源码等知识,进一步强化. 就个人而言,前一种方法其实就是自己动手造轮子,前人其实已经有了一些比较好的框架,可以直接拿来用,但是为了自己能够研究得更加深入和对爬虫有更全面的了解,自己动手去多做.

爬虫框架概述

综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优秀的框架,先把这些框架用熟,可以确保能够应付一些基本的爬虫任务,也就是所谓的解决温饱问题,然后再深入学习它的源码等知识,进一步强化. 就个人而言,前一种方法其实就是自己动手造轮子,前人其实已经有了一些比较好的框架,可以直接拿来用,但是为了自己能够研究得更加深入和对爬虫有更全面的了解,自己动手去多做.

webmagic的是一个无须配置、便于二次开发的爬虫框架

webmagic的是一个无须配置.便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫. 以下是爬取oschina博客的一段代码: ? 1 2 Spider.create(new SimplePageProcessor("http://my.oschina.net/", "http://my.oschina.net/*/blog/*")).thread(5).run(); webmagic采用完全模块化的设计,功能覆盖整个爬虫的生命周期(链接

爬虫框架——Scrapy

一.Scrapy介绍 1.Scrapy是什么 Scrapy 是一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可用于如数据挖掘.监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫. 2.何谓框架 所谓框架其实就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析

爬虫框架之Scrapy

爬虫框架之Scrapy 一.介绍 二.安装 三.命令行工具 四.项目结构以及爬虫应用简介 五.Spiders 六.Selectors 七.Items 八.Item Pipelin 九. Dowloader Middeware 十.Sider Middlewear 十一.自定义扩展 十二.setitings.py 十三.获取亚马逊商品信息 一.介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数

蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例

本文从功能需求的角度分析一般蓝牙BLE单芯片的应用框架(SDK Framework)的接口设计过程,并以TI CC2541为例说明BLE的应用开发方法. 一.应用框架(Framework) 我们熟知的Framework包括Android Framework.Linux QT.Windows MFC.应用框架抽象并封装实现了一般应用场景的需求,完成应用开发的80%,剩下的20%则以回调(callback)和接口的方式供应用开发人员调用以完成具体的需求. 一般Framework完成的工作包括:任务分

高效敏捷的Java爬虫框架SeimiCrawler示例

SeimiCrawler是一个强大的,高效敏捷的,支持分布式的爬虫开发框架,希望能在最大程度上降低新手开发一个可用性高且性能不差的爬虫系统的门槛,以及提升开发爬虫系统的开发效率.在SeimiCrawler的世界里,绝大多数人只需关心去写抓取的业务逻辑就够了,其余的Seimi帮你搞定.设计思想上SeimiCrawler受Python的爬虫框架Scrapy启发很大,同时融合了Java语言本身特点与Spring的特性,并希望在国内更方便且普遍的使用更有效率的XPath解析HTML,所以SeimiCra

记一次爬虫框架的开发经历

爬虫是我看过的所有程序中最酷的,因为爬虫可以真正帮你完成一些费事繁琐的工作,比如搜集图片. 咳咳~因为某个网站会把图片打包成种子,发布,并且提供下载,对于老司机来说是省时省力的事情,但是种子是会失效的.有一些很想看的图集想看但是种子失效了,这时候会让人很尴尬,还好,种子没了但是官网图片还在!所以当时就想要是自己写一个爬虫去帮我完成这些另存为图片的工作就好了. 我是想也没想,自己开始筹划. 开始的第一步自然而然是收集一些网页的前端代码(也就是在浏览器里面右键->网页源代码里面查看).因为我要知道这

Java爬虫框架SeimiCrawler的工程自动打包工具使用

为了便于开发者对使用SeimiCrawler框架开发的爬虫工程的打包部署,SeimiCrawler现已推出maven-seimicrawler-plugin,一个maven工程的自动化打包插件.下面简要介绍下他的使用. 开始 pom添加添加plugin <plugin> <groupId>cn.wanghaomiao</groupId> <artifactId>maven-seimicrawler-plugin</artifactId> <