论文部分内容阅读
随着互联网的不断发展,我们获取信息的途径逐渐被网络所替代,但与此同时网络信息量以惊人的速度在增长,面对这样海量的数据,如何快速、精确的收集到所需数据是目前研究的热点。目前很多公司为了提高抓取效率都采用了分布式网络爬虫技术,使用多台机器来并行的从互联网上抓取网络数据。本文设计并实现了一个构建在云平台上的分布式网络爬虫系统,利用云平台的多种特性来提高网络爬虫的性能以及可扩展性。首先,本文针对云平台的一些特性,以及现有的各种分布式网络爬虫系统的局限性,提出了本文的网络爬虫系统的总体设计方案,并将系统按模块划分为控制节点模块、爬虫节点模块和Web管理页面模块。控制节点主要负责URL管理以及虚拟机管理,URL管理对新抓取到的URL进行URL标准化和基于Redis的布隆过滤器去重后,将其存储在Redis的待抓取URL队列中;虚拟机管理是利用云平台按需申请资源的特点来动态调节爬虫节点数量。爬虫节点是真正进行网页的抓取工作,包括网页下载、网页解析和数据存储,针对网页下载设计了一种哈希链表的DNS缓存数据结构,以提高网页下载速度;网页解析采用模板化功能增强其通用性;数据存储则是将收集到的大量数据存储在云平台的网盘上。Web管理页面是可视化的管理整个爬虫系统,通过Web页面可创建爬虫任务、管理爬虫任务和监控爬虫节点。其次,在设计的基础上对本文的网络爬虫系统进行了具体的实现。采用了Java语言来开发本系统的各个功能模块,控制节点与爬虫节点间的信息交互使用了Socket编程技术。网页下载模块使用了HttpClient组件来获取网页数据,并设置了多种网页下载失败处理措施。网页解析模块将正则表达式、XPath和Css Selector进行组合,以链式的方式抽取数据。Web管理页面是基于Spring MVC框架和Jetty容器来实现的,使用了JSP、JavaScript、AJAX等Web编程技术。再次,将本文的网络爬虫系统部署到实验室的云平台上,从功能、性能和可扩展性三个方面对其进行测试,并对测试的结果进行了分析,测试结果表明本系统具有较好的可用性及可扩展性。最后,对本文实现的网络爬虫系统做了一个总结,并分析了本系统中存在的不足,提出了后续的研究方向。