ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:202.36KB ,
资源ID:9589673      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9589673.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java爬虫框架.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Java爬虫框架.docx

1、Java爬虫框架一、架构图那里搜网络爬虫框架主要针对电子商务网站进行数据爬取,分析,存储,索引。爬虫:爬虫负责爬取,解析,处理电子商务网站的网页的内容数据库:存储商品信息索引:商品的全文搜索索引Task队列:需要爬取的网页列表Visited表:已经爬取过的网页列表爬虫监控平台:web平台可以启动,停止爬虫,管理爬虫,task队列,visited表。二、爬虫1.流程1)Scheduler启动爬虫器,TaskMaster初始化taskQueue2)Workers从TaskQueue中获取任务3)Worker线程调用Fetcher爬取Task中描述的网页4)Worker线程将爬取到的网页交给Pars

2、er解析5)Parser解析出来的数据送交Handler处理,抽取网页Link和处理网页内容6)VisitedTableManager判断从URLExtractor抽取出来的链接是否已经被爬取过,如果没有提交到TaskQueue中2.SchedulerScheduler负责启动爬虫器,调用TaskMaster初始化TaskQueue,同时创建一个monitor线程,负责控制程序的退出。何时退出?当TaskQueue为空,并且Workers中的所有线程都处于空闲状态。而这种形势在指定10分钟内没有发生任何变化。就认为所有网页已经全部爬完。程序退出。3.Task Master任务管理器,负责管理任

3、务队列。任务管理器抽象了任务队列的实现。l在简单应用中,我们可以使用内存的任务管理器l在分布式平台,有多个爬虫机器的情况下我们需要集中的任务队列在现阶段,我们用SQLLite作为任务队列的实现。可供替代的还有Redis。任务管理器的处理流程:l任务管理器初始化任务队列,任务队列的初始化根据不同的配置可能不同。增量式的情况下,根据指定的URL List初始化。而全文爬取的情况下只预先初始化某个或几个电子商务网站的首页。l任务管理器创建monitor线程,控制整个程序的退出l任务管理器调度任务,如果任务队列是持久化的,负责从任务队列服务器load任务。需要考虑预取。l任务管理器还负责验证任务的有效

4、性验证,爬虫监控平台可以将任务队列中的某些任务设为失效?4.WorkersWorker线程池,每个线程都会执行整个爬取的流程。可以考虑用多个线程池,分割异步化整个流程。提高线程的利用率。5.FetcherFetcher负责直接爬取电子商务网站的网页。用HTTP Client实现。HTTP core 4以上已经有NIO的功能,用NIO实现。Fetcher可以配置需不需要保存HTML文件6.ParserParser解析Fetcher获取的网页,一般的网页可能不是完好格式化的(XHTML是完美格式化的),这样就不能利用XML的类库处理。我们需要一款比较好的HTML解析器,可以修复这些非完好格式化的网

5、页。熟悉的第三方工具有TagSoup,nekohtml,htmlparser三款。tagsoup和nekohtml可以将HTML用SAX事件流处理,节省了内存。已知的第三方框架又使用了哪款作为他们的解析器呢?lNutch:正式支持的有tagsoup,nekohtml,二者通过配置选择lDroids:用的是nekohtml,TikalTika:tagsoup据称,tagsoup的可靠性要比nekohtml好,nekohtml的性能比tagsoup好。nekohtml不管是在可靠性还是性能上都比htmlparser好。具体结论我们还需要进一步测试。我们还支持regex,dom结构的html解析器。

6、在使用中我们可以结合使用。进一步,我们需要研究文档比较器,同时需要我们保存爬取过的网站的HTML.可以通过语义指纹或者simhash来实现。在处理海量数据的时候才需要用上。如果两个HTML被认为是相同的,就不会再解析和处理。7.HandlerHandler是对Parser解析出来的内容做处理。回调方式(visitor):对于SAX event处理,我们需要将handler适配成sax的content handler。作为parser的回调方法。不同事件解析出来的内容可以存储在HandlingContext中。最后由Parser一起返回。主动方式:需要解析整个HTML,选取自己需要的内容。对Pa

7、rser提取的内容进行处理。XML需要解析成DOM结构。方便使用,可以使用Xpath,nodefilter等,但耗内存。ContentHandler:它还包含组件ContentFilter。过滤content。URLExtractor负责从网页中提取符合格式的URL,将URL构建成Task,并提交到Task queue中。8.VisitedTableManager访问表管理器,管理访问过的URLs。提取统一接口,抽象底层实现。如果URL被爬取过,就不会被添加到TaskQueue中。三、Task队列Task队列存储了需要被爬取的任务。任务之间是有关联的。我们可以保存和管理这个任务关系。这个关系也

8、是URL之间的关系。保存下来,有助于后台形成Web图,分析数据。Task队列在分布式爬虫集群中,需要使用集中的服务器存放。一些轻量级的数据库或者支持列表的NoSql都可以用来存储。可选方案:l用SQLLite存储:需要不停地插入删除,不知性能如何。l用Redis存储四、Visited表Visited表存储了已经被爬的网站。每次爬取都需要构建。lSQLLite存储:需要动态创建表,需要不停地查询,插入,还需要后台定期地清理,不知性能如何。lMysql内存表hash indexlRedis: Key value,设过期时间lMemcached: key value, value为bloomfilt

9、er的值针对目前的数据量,可以采用SQLLite五、爬虫监控管理平台l启动,停止爬虫,监控各爬虫状态l监控,管理task队列,visited表l配置爬虫l对爬虫爬取的数据进行管理。在并发情况下,很难保证不重复爬取相同的商品。在爬取完后,可以通过爬虫监控管理平台进行手动排重。一、模块1.SchedulerScheduler负责启动爬虫,停止爬虫,监控爬虫的状态。Scheduler在调度爬虫时,借助于Quartz,设置爬虫在某个时刻启动。同一个名字的爬虫是stateful的。Task:初始化任务。Trigger:触发器,描述何时触发爬虫。开放Scheduler远程API,可以通过爬虫配置管理平台管

10、理和监控爬虫。2.Task MasterTaskMaster:管理Task的执行过程,提交Task给WorkerThreadPool执行。TaskController:独立线程,控制何时停止TaskMaster,DelayController和它自己ExecutionState:描述TaskMaster当前状态TaskQueue:存放未爬取的所有Task。可以是基于内存的,也可以是持久化的。不同的实现。DelayTaskQueue:有些网站,如果连续访问,会禁止爬取,遇到这种情况,我们会暂时停止对该网页的爬取,我们需要一个DelayTaskQueue存放被延迟的Task。DelayContro

11、ller:独立线程,不停的检测DelayTaskQueue中的Task是否过了限制期,过了限制期,移入到TaskQueue中等待爬取Task:描述一个爬取任务。HTMLTask:网页爬取任务DBTask:DB爬取任务DelayPolicy:定义Task的延迟策略,比如对同一个域名的网站,采取每隔5秒钟的爬取一次的方案。如果发现遭到限制,对同一个域名的网站,采取停歇10分钟的策略。考虑到对将来对数据爬虫的支持,抽象了统一接口。数据库对Task,Fetcher,parser,Handler,Worker都有自己的实现。3.Fetcher网页的直接爬取者。根据传入的Task,爬取对方的网页。WebF

12、etcher爬取的网页直接作为输入流传回。HTTPClientFetcher:用HTTPClient4.0实现的WebFetcher,底层用的是java NIO.4.WorkerWorker负责Task的具体执行,从爬取到处理的整个流程. TaskMaster将Worker提交到线程池中,有线程池调度并发执行。Worker:整个爬取的执行流程HTMLWorker:处理HTML网页的爬取WorkerThreadPool:线程池,供Worker执行使用WorkerProcessor:监听器。在worker执行前,执行后调用。可以做一些日志,错误处理等等。5.ParserParser将爬虫爬取的内容

13、解析为规范的数据格式,提取有用的信息,便于系统进一步处理。Parser:将传入的content解析成Data,或者利用传入的handler可以一边parse一边调用handler处理。Data:Parser解析后的数据结构Content:Fetcher到的ContentRegexParser:对传入的字符串进行正则匹配,提取想要的字符串。SaxParser:主要是通过回调方式实现DomParser:将XML转成Document返回HTMLParser:组合模式,可以综合使用RegexParser,DomParser等完成任务。ParseContext:传给Parser的上下文环境。可供扩展使用。6.FilterFilter可以对解析好的新Task,进行过滤。7.HandlerHandler对解析好的内容进行进一步处理,异步化处理和爬取解析。处理主要是将爬取的数据入库和索引。一、Task队列Task队列,存放还没有被处理的新任务。二、Visited表Visited表的判断其实是TaskFilter的一种,只是TaskFilter用了VisitedTable来存储已经爬取过的任务。VisitedTaskFilter:判断Task是否已经被处理过VisitedTable:存储已经被爬取过的任务

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1