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

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...

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

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

    开源通用爬虫框架YayCrawler.zip

    YayCrawler是一个基于WebMagic开发的分布式通用爬虫框架,开发语言是Java。我们知道目前爬虫框架很多,有简单的,也有复杂的,有轻 量型的,也有重量型的。您也许会问:你这个爬虫框架的优势在哪里呢?额,这个是一...

    医疗服务-医疗服务平台-医疗服务平台源码-医疗服务平台java代码-基于springboot的医疗服务平台-医疗服务平台java

    爬虫医疗服务-医疗服务平台-医疗服务平台源码-医疗服务平台java代码-医疗服务平台设计与实现-基于springboot的医疗服务平台-基于Web的医疗服务平台设计与实现-医疗服务网站-医疗服务网站源码-医疗服务网站java代码-...

    疫情防控-疫情防控系统-疫情防控系统源码-疫情防控管理系统-基于Web的疫情防控系统设计与实现-疫情防控系统设计与实现-java

    python爬虫疫情防控-疫情防控系统-疫情防控系统源码-疫情防控管理系统-疫情防控管理系统java代码-疫情防控系统设计与实现-基于springboot的疫情防控系统-基于Web的疫情防控系统设计与实现-疫情防控网站-疫情防控网站...

    java抓取技术源码-multithreading-crawlers:多线程爬虫--抓取淘宝商品详情页URL

    本项目是一个Java编写的多线程爬虫系统。此系统与我之前开发的结合使用,共抓取了淘宝近3000个页面,从中解析到了近9万的商品详情页URL。 我并没有直接将这些商品详情页中最具价值的数据(商品信息)提取出来,因为...

    java实现可配置爬虫源码-MagicToe:基于webmagic+springboot+mybatis的Java爬虫,使用Echarts进行

    MagicToe是一个基于Java爬虫框架的Java爬虫实战案例,MagicToe提供了从获取数据到数据持久化、可视化分析以及构建简单的代理池等一系列完整流程,旨在为初涉Java爬虫的程序员提供一个参考教程和一整套完整的解决方案...

    java8stream源码-elves::confetti_ball:轻量级爬虫框架的设计与实现

    一个轻量级的爬虫框架设计与实现,。 特性 事件驱动 易于定制 多线程执行 CSS 选择器和 XPath 支持 Maven 坐标 <groupId>io.github.biezhi <artifactId>elves <version>0.0.2 如果你想在本地运行这个项目源码,请...

    JAVA高并发高性能高可用高扩展架构视频教程

    应用架构之魂设计模式实战演练应用架构之魂设计模式实战演练 揭开springAOP神秘面纱(动态代理) Mysql性能优化之索引优化 写实现Tomcat服务器 移动后台端框架设计 公司级框架原理解析 解密公司内部框架开发(打造属于...

    magic-script是一款基于JVM的脚本语言,目前主要是为magic-api项目设计

    magic-script是一款基于JVM的脚本语言,目前主要是为magic-api项目设计。magic-api,接口快速开发框架,通过Web页面配置,自动映射为HTTP接口;spider-flow,新一代爬虫平台,以图形化方式定义爬虫流程,不写代码...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包10

    JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java 穿越NAT方案 JSTUN.tar JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM...

    java开源包1

    JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java 穿越NAT方案 JSTUN.tar JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包4

    JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java 穿越NAT方案 JSTUN.tar JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM...

    java开源包11

    JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java 穿越NAT方案 JSTUN.tar JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM...

    java开源包6

    JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java 穿越NAT方案 JSTUN.tar JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM...

    java开源包101

    JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java 穿越NAT方案 JSTUN.tar JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM...

    java开源包9

    JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java 穿越NAT方案 JSTUN.tar JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM...

    java开源包5

    JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java 穿越NAT方案 JSTUN.tar JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM...

Global site tag (gtag.js) - Google Analytics