论文部分内容阅读
随着互联网飞速的发展,网络上的信息呈指数级的增长,如此高的信息数量级也给用户获取信息带来了巨大的挑战。网络爬虫作为获取数据的工具常常被应用于搜索引擎当中,然而面向中小规模系统的网络爬虫由于其自身的局限性常常面临诸多问题,例如单机的网络爬虫程序抓取数据速度太慢,而大多数成熟的开源网络爬虫框架都未实现分布式化;互联网中的网页结构各不相同,单一的网络爬虫程序无法匹配所有类型的网页等等。因此设计并实现一个可定制性高的、简单稳定的、面向中小规模的高性能分布式爬虫具有很重要的意义,本文在Scrapy框架的基础上结合Redis数据库设计并实现了一个分布式网络爬虫系统,使用者通过简单的配置即能快速的抓取到其想要的数据。本文的主要工作包括以下几点:(1)重点研究了主从式架构下的任务调度算法,并在此基础上提出了一种动态反馈的任务调度策略。主节点在掌握从节点群中各个Scrapy爬虫实时状态的情况下使用该策略进行任务调度,并在爬虫节点发生变化时进行相应的任务调整,确保系统中的各个爬虫节点动态负载均衡。(2)针对传统的基于内存或磁盘的URL去重时导致的空间占用率过高的问题,本文结合布隆过滤器算法提出了一种海量URL去重策略,该策略利用多个哈希函数对原始的URL数据集进行空间映射压缩,降低其空间的占有率,并且在查询过程中,仅通过一次哈希即可判断某URL是否抓取过,大大提高了查询效率。(3)设计并实现了一种多节点下的爬虫限速策略,集群中的爬虫节点能根据用户设定的频率来访问对应的站点。其中基于IP的限速限定了同一台机器中的爬虫节点访问某站点的频率,基于爬虫类型的限速限定了同一种类型的爬虫节点访问某站点的频率。(4)对Scrapy框架中的调度器、数据采集以及数据管道组件重新定制开发,调度器的开发使其支持分布式采集,数据采集的开发使其支持带采集规则的数据抽取,数据管道的开发使其支持数据清洗、编码转换以及正文提取等功能。(5)基于Twisted框架设计并实现了一个异步任务响应的爬虫管理器,用户通过该管理器能方便的控制各节点上的Scrapy爬虫。