基于Scrapy的网络爬虫系统框架设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Scrapy的网络爬虫系统框架设计与实现

作者:王磊刘晓丹

来源:《微型电脑应用》2019年第04期

摘要:研究了基于Scrapy的网络爬虫系统框架。以设计目标为依据对网络爬虫所需具备的功能特性进行了详细分析,完成了系统总体框架的设计。该框架采用主从结构,介绍了各层主要模块的功能,详细阐述了完整的抓取过程。为促进网络爬虫系统框架的实现,综合MongoDB及Redis,完成了系统数据库方案的设计,从而提高用户获取信息的速度和质量。

关键词: Scrapy; 网络爬虫; 系统框架设计; 数据库设计

中图分类号: TP391.3

文献标志码: A

Abstract: This paper mainly studies the Scapy-based network crawler system framework,analyzes the functional characteristics of the network crawler in detail based on the design objectives, completes the design of the overall framework of the system. The framework adopts the master-slave structure, and introduces the functions of the main modules in each layer, elaborates the complete grasp in detail. In order to promote the implementation of the network crawler system framework, MongoDB and Redis are integrated to complete the design of the system database scheme, so as to improve the speed and quality of user access to information.

Key words: Scrapy; Web crawler; System framework design; Database design

0 引言

網络上的信息随快速发展的互联网表现出指数级的增长趋势,增加了用户快速获取所需信息的难度。作为数据获取工具的一种,搜索引擎中通常会应用到网络爬虫,但针对中小规模系统的网络爬虫往往面临较多的问题,在抓取数据速度上单机的网络爬虫程序难以有效满足需求,并且网络爬虫框架大都没有实现分布化,单一的网络爬虫程序难以满足多种类型的网页结构,简单稳定的高性能分布式网络爬虫系统框架以满足中小规模系统的需求具有较高的实际应用价值。

1 系统设计目标; Scrapy能够进行屏幕抓取,且具备web抓取框架、快速、高层次的优势,提供了多种类型爬虫的基类(包括BaseSpider、sitemap等),用途广泛,用于从web站点页面中抓取并提取出结构化的数据,可用于数据挖掘、监测和自动化测试,同时用户可以根据实际需求进行修改。

不同于传统的通用网络爬虫,基于Scrapy的网络爬虫系统采集的网页信息需与用户需求相关,而无需对互联网上所有的资源进行采集。针对不同网站所具有的网页结构不仅相同,为降低资源耗费及开发成本,网络爬虫系统的设计需具有足够的灵活性,从而能够在不同环境下无需做较大改动即可应用;随着网页数量的激增,考虑到单机抓取速度的有限性,需在原有Scrapy框架基础上进行优化,完成部分组件的重写以支持分布式抓取,以降低采集时间;分布

式网络爬虫在中小规模系统中的关键在于负载均衡,需确保系统分配任务量时以各爬虫节点的负荷状态为依据,使爬虫的抓取效率得以有效提高;同一时刻需限制发送到远程服务器的请求以及集群中爬虫节点对网站的访问频率;提高系统错误处理的能力,能够及时处理突发状况;降低系统操作及配置的难度,爬虫开始或停止操作简单,对集群中各爬虫速度进行实时监控。

2 系统总体设计系统总体架构如图1所示,(1)用户交互层由爬虫管理和配置两个子页面构成,完成同用户的交互,用户提交的请求(包括查询爬虫任务状态、站点配置信息更新、查询模块状态及爬虫抓取4类请求)由配置子页面接收,为便于后续消息预处理模块解析每类请求各有其固定的格式;集群中爬虫的启动与停止以及对各节点上爬虫实时的运行状态的监控由爬虫管理子页面实现。

(2)对配置子页面传递请求消息的验证、解析由处理层完成,为有效的处理大量活跃的流数据以满足不断增加的业务需求,系统的中间缓存器使用了Kafka,保证数据流转的高性能及低延迟,其中配置子页面请求的周期性获取以及请求格式正确性的验证由消息预处理模块完成,单位时间内该模块请求成功/失败数量的记录则由状态计数器完成,如果请求的验证结果为爬虫抓取请求即存入任务队列,其余3类请求以相应格式存入到Redi中,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。多个该模块同时运行以以确保该模块宕机对系统正常运行不会造成影响;Redis中传入的验证成功请求的周期性检测由Redis监控模块完成,然后通过相应插件的调用完成该请求的处理解析,将结果传送到kafka消息系统中,同样使用多个Redis监控模块对请求进行检测处理,从而提高系统的可靠性及请求响应速度[1]。

(3)系统的关键在于业务逻辑层,其构成为主节点一个及从节点若干个,物理结构如图2所示。

各爬虫节点的任务调度交通过此种结构由主节点负责统一执行,降低了任务调度的难度,以爬虫节点实时运行状态为依据完成最优调度决策的制定。主节点中的爬虫任务队列分为总爬虫和节点两种,爬虫抓取请求(由配置子页面中传入)及新的爬虫抓取任务(由后续爬虫节点在网页中抽取)存放于总爬虫任务队列中;各爬虫节点待抓取的爬虫任务存放于节点爬虫任务队列中,待抓取爬虫任务的存放选用内存型数据库Redis,以确保快速获取与提交爬虫任务。

该层中爬虫任务由总爬虫任务队列到各节点队列中的分发由任务调度器完成,以爬虫节点实时状态为依据任务调度器采用动态反馈任务调度策略分发爬虫抓取任务,以确保集群中各爬虫节点负载均衡;集群中爬虫节点对某个网站的访问频率(在固定时间段内)的控制由限速器完成,避免被网站屏蔽以实现数据的抓取,降低远程服务器的压力;为使整体的抓取效率提高,需通过过滤器模块避免重复抓取相同的URL,海量URL去重通过布隆过滤器算法实现[2]。

相关文档
最新文档