时间:2024-05-04
贺宗平 王正路
(1.南京审计大学信息化办公室 江苏省南京市 211815 2.江苏师范大学信息化建设与管理处 江苏省徐州市 221116)
互联网文本数据采集能力是目前各种数据集成、应用系统关注的一项核心支撑能力,在各种系统开发中有着重要的作用。各种网站、web应用系统的文本数据的获取方式存在一定规律性和相似性,网站文本数据的利用,诸如NLP相关研究的价值较高。因此,研究面向互联网文本数据采集的框架具有重要的现实意义,并且能够提供分布式、组件化和配置化的框架能力。
Scrapy是适用于Python的一个快速、高层次的屏幕抓取和Web抓取框架,用于抓取Web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy是一个适用爬取网站数据、提取结构性数据的应用程序框架,它可以应用在广泛领域:Scrapy常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。通常我们可以很简单的通过Scrapy框架实现一个爬虫,抓取指定网站的文字或图片等内容。Scrapy架构示意图如图1所示。
Scrapy Engine框架核心:负责爬虫采集器、采集流水线、分析下载器、调度器之间的信息交互、数据传输等;
Scheduler调度器:根据Scrapy Engine发送的Requests请求,按照需求排列进入队列,当Scrapy Engine进行处理时,调度器将此请求转交处理;
Downloader分析下载器:负责与Scrapy Engine所有Request请求进行分析过滤获取,并将获取到的Responses内容传给Scrapy Engine,再转交给Spider来处理;
Spider爬虫:负责对所有Response内容的分析处理过滤,从其中提取处理数据,获取指定字段所需要的数据,并将需要追踪采集的URL提交框架,重新进入Scheduler调度器;
Item Pipeline采集流水线:负责处理Spider中获取到指定字段数据,并进行分析、过滤、存储等采集后期处理操作;
Downloader Middlewares下载中间件:一个可以自定义扩展下载功能的组件;
Spider Middlewares中间件:一个可以自定扩展和操作引擎和Spider中间通信的功能组件。
Requests:爬虫引擎访问互联网网站内容的http请求;
Responses:http请求的返回内容,支持xpath、css、re等解析方式,以及处理语言文字格式等。
基于scrapy设计的文本数据采集框架应当具有以下几种能力:
(1)框架组件轻量化,应用方便;
(1)支持海量数据的采集,具备数据定制化存储、采集消息推送等功能;
(1)具备分钟级别的定时调度采集能力,能够对采集目标进行定时采集。
如图2所示,框架具体由5个部分组成:
1.2.1 crawler采集引擎
crawler采集引擎是基于scrapy的可配置特征库的爬虫引擎,采集对象网页的特征经过分析后被写入元数据中,crawler根据开发人员配置的特征信息表数据和定时调度信息进行分析采集。
1.2.2 esoperation存储组件
esoperation存储组件是存储crawler引擎采集的文本数据、元数据信息内容等,可根据开发和应用的需求进行定制存储。
1.2.3 find检索组件
find检索组件是基于elasticsearch的高级检索组件,具备支持按用户自定义特征、时间、关键词等维度进行组合聚合检索。
1.2.4 analysis缓存组件
图1:Scrapy架构示意图
图2:文本数据采集框架示意图
图3:常规式集成示意图
图4:配置式集成示意图
analysis缓存组件是基于redis构建的高速缓存服务,为系统采集服务提供缓存和消息队列服务。
1.2.5 notify消息组件
notify消息组件为高性能消息推送服务组件,可根据用户需求在采集服务过程中集成进行消息定制推送等服务,例如支持企业微信的消息推送等。
(1)配置采集目标源的网页特征数据表信息,配置采集任务的定时调度时间间隔;crawler引擎根据配置信息启动采集任务;
(2)esoperation组件采集分析每一条文本信息,根据用户自定义规则进行过滤并存储持久化;
(3)采集分析过程中,根据自定义参数和配置,notify组件进行相关消息的推送和提示;
(4)集成和应用环节,通过find组件提供查询API接口和服务,为系统提供多种丰富的组合查询检索功能;
(5)系统可配置采集中产生的高频公共统计数据、文本数据的高速访问服务。
定时采集调度是互联网数据采集中基础核心的功能,通过系统提供定时采集指定数据源头的访问能力。定时调度器包括以下几个部分内容:
2.1.1 触发器triggers
触发器主要的是调度的逻辑,用于指定任务作业的运行依据和条件。包括了三种主要的trigger:第一种是date,即指定的系统后台运行时间点触发;第二种是interval,系统指定固定的时间间隔触发运行;第三种是cron,按照Linux Crontab规范的时间周期性触发运行。
2.1.2 任务储存器job stores
主要用于存放任务,把运行任务的相关元信息数据存放在内存或数据库中。
2.1.3 执行器executors
执行器主要是确保任务的并发执行可靠性,将多任务提交到线程池或进程池中运行,并任务完成的状态信号通知给调度器。
2.1.4 调度器schedulers
调度器是整个定时采集调度的核心控制组件,将触发器、任务存储器、执行器在调度器中进行运行和关联操作。
分布式采集是以可扩展集群满足海量采集数据需求,本研究的分布式采集通过将任务分配和节点协同进行分布式采集。
2.2.1 任务分配
任务分配采用了可配置化目标采集地址,采集器为基于docker的独立构建,可根据采集目标地址的情况进行集群化扩展配置,实现集群并发采集。
2.2.2 采集协同
采集任务的协同采取简化机制设计,在采集地址元信息表中配置对应集群中的采集器,实现采集任务负载均衡。
(1)对于采集周期一致、需求相似,且需采集多个数据源项目的需求情况,支持将多个爬虫采集器集成综合为独立插件,具有良好的复用和扩展性。
(2)支持采集过程的网页关键标识标题和URL去重,对同站源的重复内容过滤,防止重复内容。在采集存储环节,通过对同源网站的URL进行重复性检索查询,进而实现防止内容采集重复。
(1)系统基于全文检索数据库Elastic Search进行采集数据存储,能够对采集数据存储字段进行灵活自定义配置,支持不同的系统任务采集字段差异化可灵活配置。
(2)向系统集成提供消息推送服务,具有稳定高性能的无阻塞异步消息队列,以及可定制化的消息类型的服务,以SDK、API的方式支持适配微信、钉钉等移动端应用消息通信。
应用集成以组件形式为系统开发和应用的场景提供集成支持,一般应用于采集调度周期类似、需求近似,需要采集多个目标网站文本数据源的项目。
常规项目中的采集需求,通常是增加开发不同的爬虫,这种方式开发量大,需要针对每一个网站都要进行定制化开发。如图3所示。
本项目研究实现了可配置化的采集源配置,通过动态配置元数据信息即可以实现常规集成,无需额外开发工作量。将这些爬取目的地址集成为一个爬虫,我们只需维护这一个集成中间件即可以,同时支持集群分布式采集,方便采集服务动态扩容。如图4所示。
以某系统集成应用采集框架进行新闻文本数据采集为例。
(1)引用crawler引擎组件,采集网站特征参数,以人民日报、凤凰网两个网站采集为例:
crawler作为采集引擎核心组件,具备网站内容解析、采集调度等核心基础功能,先期分析目标网站的特征参数,将特征参数传递给crawler的启动参数,同时配置采集调度时间间隔。
(2)检索查询。
(3)消息推送。
以企业微信移动端应用作为推送终端为例。
通过设计面向互联网文本数据的采集框架,实现了采集能力的高效集成和可管理配置化,能够为各种系统应用场景提供丰富的采集能力,为NLP自然语言处理的相关的研究提供了丰富的研究语料和文本数据支撑,具有重要的支撑意义。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!