`
ldd600
  • 浏览: 103779 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
47bb354f-8b5f-3ea6-a206-c7ead38c741c
Hyperic插件开发不完...
浏览量:11271
社区版块
存档分类
最新评论

Java爬虫框架(一)--架构设计

 
阅读更多

一、        架构图

那里搜网络爬虫框架主要针对电子商务网站进行数据爬取,分析,存储,索引。



 

爬虫:爬虫负责爬取,解析,处理电子商务网站的网页的内容

数据库:存储商品信息

索引:商品的全文搜索索引

Task队列:需要爬取的网页列表

Visited表:已经爬取过的网页列表

爬虫监控平台:web平台可以启动,停止爬虫,管理爬虫,task队列,visited表。

二、        爬虫

1.      流程

1)       Scheduler启动爬虫器,TaskMaster初始化taskQueue

2)       WorkersTaskQueue中获取任务

3)       Worker线程调用Fetcher爬取Task中描述的网页

4)       Worker线程将爬取到的网页交给Parser解析

5)       Parser解析出来的数据送交Handler处理,抽取网页Link和处理网页内容

6)       VisitedTableManager判断从URLExtractor抽取出来的链接是否已经被爬取过,如果没有提交到TaskQueue



 

2.      Scheduler

Scheduler负责启动爬虫器,调用TaskMaster初始化TaskQueue,同时创建一个monitor线程,负责控制程序的退出。

何时退出?

TaskQueue为空,并且Workers中的所有线程都处于空闲状态。而这种形势在指定10分钟内没有发生任何变化。就认为所有网页已经全部爬完。程序退出。

3.      Task Master

任务管理器,负责管理任务队列。任务管理器抽象了任务队列的实现。

l        在简单应用中,我们可以使用内存的任务管理器

l        在分布式平台,有多个爬虫机器的情况下我们需要集中的任务队列

在现阶段,我们用SQLLite作为任务队列的实现。可供替代的还有Redis

任务管理器的处理流程:

l        任务管理器初始化任务队列,任务队列的初始化根据不同的配置可能不同。增量式的情况下,根据指定的URL List初始化。而全文爬取的情况下只预先初始化某个或几个电子商务网站的首页。

l        任务管理器创建monitor线程,控制整个程序的退出

l        任务管理器调度任务,如果任务队列是持久化的,负责从任务队列服务器load任务。需要考虑预取。

l        任务管理器还负责验证任务的有效性验证,爬虫监控平台可以将任务队列中的某些任务设为失效?

4.      Workers

Worker线程池,每个线程都会执行整个爬取的流程。可以考虑用多个线程池,分割异步化整个流程。提高线程的利用率。

5.      Fetcher

Fetcher负责直接爬取电子商务网站的网页。用HTTP Client实现。HTTP core 4以上已经有NIO的功能, NIO实现。

Fetcher可以配置需不需要保存HTML文件

6.      Parser

Parser解析Fetcher获取的网页,一般的网页可能不是完好格式化的(XHTML是完美格式化的),这样就不能利用XML的类库处理。我们需要一款比较好的HTML解析器,可以修复这些非完好格式化的网页。

熟悉的第三方工具有TagSoupnekohtmlhtmlparser三款。tagsoupnekohtml可以将HTMLSAX事件流处理,节省了内存。

已知的第三方框架又使用了哪款作为他们的解析器呢?

l        Nutch:正式支持的有tagsoupnekohtml,二者通过配置选择

l        Droids:用的是nekohtmlTika

l        Tikatagsoup

据称,tagsoup的可靠性要比nekohtml好,nekohtml的性能比tagsoup好。nekohtml不管是在可靠性还是性能上都比htmlparser好。具体结论我们还需要进一步测试。

我们还支持regexdom结构的html解析器。在使用中我们可以结合使用。

进一步,我们需要研究文档比较器,同时需要我们保存爬取过的网站的HTML.可以通过语义指纹或者simhash来实现。在处理海量数据的时候才需要用上。如果两个HTML被认为是相同的,就不会再解析和处理。

7.      Handler

Handler是对Parser解析出来的内容做处理。

回调方式(visitor):对于SAX event处理,我们需要将handler适配成saxcontent handler。作为parser的回调方法。不同事件解析出来的内容可以存储在HandlingContext中。最后由Parser一起返回。

主动方式:需要解析整个HTML,选取自己需要的内容。对Parser提取的内容进行处理。XML需要解析成DOM结构。方便使用,可以使用Xpathnodefilter等,但耗内存。

ContentHandler:它还包含组件ContentFilter。过滤content

URLExtractor负责从网页中提取符合格式的URL,将URL构建成Task,并提交到Task queue中。

8.      VisitedTableManager

访问表管理器,管理访问过的URLs。提取统一接口,抽象底层实现。如果URL被爬取过,就不会被添加到TaskQueue中。

三、        Task队列

Task队列存储了需要被爬取的任务。任务之间是有关联的。我们可以保存和管理这个任务关系。这个关系也是URL之间的关系。保存下来,有助于后台形成Web图,分析数据。

Task队列在分布式爬虫集群中,需要使用集中的服务器存放。一些轻量级的数据库或者支持列表的NoSql都可以用来存储。可选方案:

l          SQLLite存储:需要不停地插入删除,不知性能如何。

l          Redis存储

四、        Visited

Visited表存储了已经被爬的网站。每次爬取都需要构建。

l          SQLLite存储:需要动态创建表,需要不停地查询,插入,还需要后台定期地清理,不知性能如何。

l          Mysql 内存表 hash index

l          Redis: Key value,设过期时间

l          Memcached: key value, valuebloomfilter的值

针对目前的数据量,可以采用SQLLite

五、        爬虫监控管理平台

l          启动,停止爬虫,监控各爬虫状态

l          监控,管理task队列,visited

l          配置爬虫

l          对爬虫爬取的数据进行管理。在并发情况下,很难保证不重复爬取相同的商品。在爬取完后,可以通过爬虫监控管理平台进行手动排重。

 

  • 大小: 20.3 KB
  • 大小: 12.6 KB
分享到:
评论

相关推荐

    Java爬虫框架设计-针对电商网站进行数据爬取、分析、存储、索引的分析与设计.pdf

    1架构图.......................1 2爬虫.........................2 2.1流程.......................2 2.2Scheduler..................3 2.3TaskMaster.................3 2.4Workers....................3 2.5...

    java开源爬虫框架

    WebMagic是一个轻量级、可扩展的Java爬虫框架,它允许开发者以简洁的代码实现复杂的网络爬取任务。在本场景中,我们讨论的"webmagic-master"文件很可能是WebMagic项目的源码仓库。 首先,我们来了解一下爬虫的基本...

    webmagic-Java爬虫框架

    webmagic:一个可扩展的Java爬虫框架,架构类似Python的Scrapy。

    Java爬虫框架.pdf

    Java爬虫框架是一种用于自动化抓取互联网数据的工具,尤其在电子商务网站的数据分析和检索中起到关键作用。该框架由多个组件构成,共同协作完成从网页抓取到数据处理的全过程。 1. **爬虫架构** 爬虫框架的架构...

    WebMagic是一个简单灵活的Java爬虫框架

    WebMagic是一个专为Java开发者设计的轻量级网络爬虫框架,它的主要目标是简化爬虫的开发过程,使得开发者可以更加专注于数据抓取和处理的逻辑,而无需关心底层的实现细节。这个框架的灵活性使得它适用于各种规模的...

    爬虫框架是什么?常见的Python爬虫框架有哪些?.docx

    爬虫框架是指为了满足爬虫需求而设计的软件框架,它可以帮助爬虫开发者快速构建爬虫应用程序,提高爬虫的效率和可维护性。常见的 Python 爬虫框架有很多,下面我们将对它们进行详细的介绍。 1. Scrapy 框架 Scrapy...

    WebMagic (Java爬虫框架).zip

    WebMagic是一个开源的Java爬虫框架,专为简化网络数据抓取而设计。它具有高度模块化、易于扩展和配置的特点,使得开发者可以快速构建自己的爬虫项目。本压缩包包含的是WebMagic的相关资料,可能包括源代码、文档、...

    一个可扩展的Java网络爬虫框架

    Java网络爬虫框架是用于自动化抓取互联网信息的程序,WebMagic是一个优秀的开源实现,它以其高度可扩展性而受到开发者们的青睐。本框架旨在简化爬虫开发过程,让开发者可以专注于数据抓取和处理的核心任务,而无需...

    计算机毕业设计 Java网络爬虫(蜘蛛)源码-zhizhu开发文档说明 软件/插件 模板 JAVA程序源码

    - **WebMagic**:一个简单易用的Java爬虫框架,支持多线程、分布式爬取,内置了PageModel和Pipeline机制,便于数据处理和存储。 - **Colt**:更复杂的爬虫框架,支持大规模爬取,提供了强大的中间件和扩展功能。 ...

    WebMaple:以webmagic为内核的分布式可视化爬虫框架,参考webmagic-avalon的架构,目标是提供可分散分布的爬虫框架,以及可视化的爬虫管理界面

    以webmagic为内核的分布式可视化爬虫框架,参考webmagic-avalon的架构,目标是提供可分散部署的爬虫框架,以及可视化的爬虫管理界面。 目前分为三个模块: maple-admin,为webmagic-avalon中的管理员中断,对应一个...

    java爬虫爬取数据

    2. 设计爬虫框架:根据需求选择合适的HTML解析工具,确定多线程策略,以及是否需要消息队列。 3. 实现网页请求:使用HttpURLConnection、HttpClient或HtmlUnit等库发送HTTP请求。 4. 解析HTML内容:使用Jsoup或其他...

    一个基于webmagic框架二次开发的java爬虫框架实战,已实现能爬取腾讯,搜狐,今日头条(单独集成功能)等资讯内.zip

    WebMagic是一个开源的Java爬虫框架,设计目标是轻量、灵活且易于扩展。这个实战项目是建立在WebMagic基础上进行二次开发,实现了对腾讯、搜狐、今日头条等主流新闻网站的资讯内容抓取,充分展示了WebMagic的强大功能...

    java爬虫项目实战源码.rar

    Java爬虫项目实战源码是针对想要学习或深入理解Java爬虫技术的开发者提供的一份实践性极强的学习资源。这个压缩包包含了完整的项目代码,可以让学习者通过实际操作来了解和掌握网络爬虫的开发过程。以下是这个项目中...

    基于Java的爬虫框架WebMagic.zip

    WebMagic是一个开源的Java爬虫框架,它设计的目标是简单易用、可扩展性强,能够帮助开发者快速构建自己的网络爬虫项目。WebMagic的核心组件包括四个部分:PageFetcher(页面抓取)、PageProcessor(页面处理)、...

    毕业设计 计算机专业-Java 搜索链接Java网络爬虫(蜘蛛)源码-zhizhu

    7. **爬虫框架**:Java中有许多成熟的爬虫框架,如WebMagic、Jsoup-Extended、Colly等,它们提供了一套完整的解决方案,包括下载、解析、存储等功能,简化了开发流程。 8. **反爬机制与IP代理**:很多网站会设置...

    Java爬虫技术,无视频,图文教程

    Java爬虫技术是一种在互联网上自动获取网页信息的程序,它是大数据时代的重要工具之一,尤其在数据分析、信息抓取和搜索引擎优化等领域具有广泛的应用。在这个无视频、图文教程中,我们将深入探讨Java语言如何用于...

    java爬虫demo

    Java爬虫Demo是一种实现网络爬虫的技术实例,它利用Java编程语言来抓取并处理互联网上的数据。网络爬虫,也称为网页蜘蛛或网络机器人,是自动浏览互联网、收集信息的一种程序。它按照一定的规则(如HTML链接)遍历...

    spider-admin-pro 一个集爬虫Scrapy+Scrapyd爬虫项-spider-admin-pro.zip

    综上所述,spider-admin-pro是一个结合Scrapy爬虫框架和Scrapyd服务的项目管理平台,旨在简化爬虫项目的部署和维护流程,提供了一站式的解决方案,尤其适合需要进行多项目管理和协同开发的团队。通过其丰富的功能,...

    基于java实现网络爬虫

    7. **爬虫架构设计**:理解广度优先搜索(BFS)和深度优先搜索(DFS)算法,有助于设计爬虫的抓取策略。同时,合理地设计爬虫的爬取范围、避免循环引用和重复爬取,也是爬虫设计的重要部分。 8. **反爬机制**:许多...

Global site tag (gtag.js) - Google Analytics