公开/公告号CN112231320A
专利类型发明专利
公开/公告日2021-01-15
原文格式PDF
申请/专利权人 南京信息职业技术学院;
申请/专利号CN202011107082.1
发明设计人 董志勇;
申请日2020-10-16
分类号G06F16/22(20190101);G06F16/951(20190101);G06F16/958(20190101);
代理机构32224 南京纵横知识产权代理有限公司;
代理人董建林
地址 210023 江苏省南京市栖霞区仙林大学城文澜路99号
入库时间 2023-06-19 09:35:27
技术领域
本发明涉及互联网数据处理技术领域,尤其涉及一种基于MapReduce算法的web数据采集方法、系统和存储介质。
背景技术
随着5G技术的普及与应用,各行业产生的海量数据将成为智能计算、智慧应用的产业基础,大数据技术可以海量数据进行采集、清洗、存储、数据标注和建模,并通过人工智能技术及软件技术进行设计开发,形成智能化应用系统,从而构建出各种智慧应用场景。在此过程中,对海量数据进行采集已成为大数据产业发展的一个基础性工作,其中,如何构建扩展性强、采集效率高且部署简单的web数据采集方法和系统等成为上述基础性工作中非常重要的一环。
发明内容
本发明的目的在于克服现有技术中的不足,提供一种基于MapReduce算法的web数据采集方法、系统和存储介质,能够使数据采集部署简单、扩展性强,获得稳定、准确的数据采集结果。
为达到上述目的,本发明是采用下述技术方案实现的:
一方面,本发明提供了一种基于MapReduce算法的web数据采集方法,该方法包括如下步骤:
接收爬虫采集节点传送的网页数据经协议封装而成的数据包;
解析所述数据包,对解析后的数据包进行Map操作构建哈希表;
向文件导出节点发送所述哈希表,以便于文件导出节点对所述哈希表进行Reduce操作获得同一网站的汇总数据集合,并将获得的汇总数据集合导出到文件中。
进一步的,所述数据包包括数据头和数据体;
所述数据头包括魔数区,任务编号,网站类型,子网站类型和数据包长度;
所述数据体包括若干Item数据,所述Item数据由所述网页数据按字段名称,字段长度和字段数据的格式封装而成。
进一步的,对解析后的数据包进行Map操作构建哈希表的方法包括如下步骤:
解析数据头获得任务编号、网站类型、子网站类型、数据包长度;
解析数据体中的Item数据,并将Item数据转变为key-value数据结构;
将所有的Item数据对应的key-value数据结构组装成Item哈希表;
根据获取的网站类型、子网站类型和Item哈希表构建Task哈希表;
根据获取的任务编号和Task哈希表创建Event消息体。
进一步的,所述Item数据结构表示为:
<字段名称,字段长度,字段数据>;
所述Item哈希表结构表示为:
<<
所述Task哈希表结构表示为:
其中,Task_key为网站类型和子网站类型的组合,Task_value为Item哈希表;
所述Event消息体结构为:
其中,Event_key为任务编号,Event_value为Task哈希表。
进一步的,对所述哈希表进行Reduce操作获得同一网站的汇总数据集合的方法包括如下步骤:
文件导出节点解析Event消息体获取所对应的Task哈希表,并判断不同Event消息体所对应的Task哈希表的主键信息是否一致:
若一致,则合并主键信息相一致的Task哈希表并删除Task哈希表中重复的Item数据,形成相同主键信息的汇总数据集合;
若不一致,则不进行合并处理。
第二方面,本发明提供了一种web数据采集系统,所述采集系统包括多个爬虫采集节点,每个所述爬虫采集节点信号连接多个数据解码节点,每个所述数据解码节点信号连接多个文件导出节点;
所述爬虫采集节点,用于对获取的网页数据进行协议封装形成数据包,并将所述数据包传送给所述数据解码节点;
所述数据解码节点,用于解析数据包并对解析后的数据包进行Map操作构建哈希表,并将所述哈希表传送给文件导出节点;
所述文件导出节点,用于对所述哈希表进行Reduce操作获得同一网站的汇总数据集合,并将获得的汇总数据集合导出到文件中。
进一步的,所述爬虫采集节点包括Spider子模块和Pipeline子模块;
所述Spider子模块,用于读取指定配置文件,获得指定网站的目标网站列表信息,并根据所述目标站列表信息创建相对应的任务编号,所述目标网站列表信息包括网站url地址、网站类型和子网站类型;以及向指定网站发起HTTP请求,获得并解析HTML网页获得指定网页数据;
所述Pipeline子模块,用于根据所述目标网站列表信息和所述指定网页数据构建包括数据体和数据头的数据包。
进一步的,所述数据解码节点包括Decoder解码器子模块和Handler数据处理子模块;
所述Decoder解码器子模块,用于解析所述数据包,并将获得的数据体和数据头保存至缓冲区;
所述Handler数据处理子模块,用于解析缓冲区的数据体和数据头,并根据解析结果依次构建包含Item哈希表和Task哈希表的Event消息体。
进一步的,所述文件导出节点包括shuffle子模块和文件管理子模块;
所述shuffle子模块,用于解析Event消息体获取所对应的Task哈希表,并判断不同Event消息体所对应的Task哈希表的主键信息是否一致:
若一致,则合并主键信息相一致的Task哈希表并删除Task哈希表中重复的Item数据,形成相同主键信息的汇总数据集合;若不一致,则不进行合并处理;
所述文件管理子模块,用于将汇总数据集合中每一个Item数据转换为“key:value”格式的字符串,并保存到文件中。
进一步的,所述Handler数据处理子模块将所述Event消息体发送至EventBus队列中,所述shuffle子模块监听所述EventBus队列并获得Event消息体。
第三方面,本发明提供了一种web数据采集系统,包括处理器及存储介质;所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行第一方面中任一项所述方法的步骤。
第四方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一项所述方法的步骤。
与现有技术相比,本发明所达到的有益效果:
(1)借助分布式架构的微服务技术,对数据采集、数据结构化、数据汇总等由不同的节点承担,并通过MapReduce算法的Map操作和Reduce操作对采集的网页数据进行解析、结构化、汇总和保存处理,方法简单、扩展性强,且能对同一网站的数据进行汇总;
(2)通过封装协议构建包含数据头和数据体的数据包,使数据组织结构化,便于Map操作和Reduce操作,形成哈希表以获得汇总数据集合,满足大规模Web数据采集的需要。
附图说明
图1是本发明实施例提供的一种web数据采集系统的结构示意图;
图2是本发明实施例提供的一种web数据采集系统各节点的结构框图;
图3是本发明实施例提供的一种经协议封装的数据包数据结构示意图;
图4是本发明实施例提供的一种基于MapReduce算法的web数据采集方法的流程图。
具体实施方式
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本发明中的具体含义。
实施例一:
如图1所示,本发明提供了一种Web数据采集系统,该系统包括爬虫采集节点、数据解码节点和文件导出节点。
爬虫采集节点负责向指定网站发起HTTP请求,模拟浏览器对网站的访问,获取HTML网页,对网页内容进行解析,提取指定的网页数据,并将网页数据按指定数据格式协议进行封装,并将封装后的数据包发送到数据解码节点;
数据解码节点对数据包进行解码和组装,形成完整的数据集合;
文件导出节点将数据集合进行汇总处理,并导出到指定文件中。
如图1所示,Web数据采集系统包括多个爬虫采集节点,每一个爬虫采集节点可信号连接多个数据解码节点,每一个数据解码节点可信号连接多个文件导出节点。
其中,爬虫采集节点使用scrapy框架实现,数据解码节点使用netty框架实现,数据导出模块和EventBus队列使用guava框架实现。
如图2所示,爬虫采集节点包括Spider子模块和Pipeline子模块,在数据采集过程中Spider子模块和Pipeline子模块的功能如下:
爬虫采集节点启动Spider子模块,重写start_requests方法,在该方法中读取csv配置文件,获得目标网站列表website_list,其中,目标网站列表website_list中的每一个元素包括目标网站url、网站类型website_type和子网站类型subwebsite_type等信息。
根据目标网站列表信息利用start_requests方法为每一个目标网站url分配一个全局唯一的任务编号Task_id。
目标网站列表website_list信息直接从配置文件中获得,这个配置文件已预先配置好目标网站url、网站类型website_type、子网站类型subwebsite_type信息。
比如,配置文件可以是一个csv的文件,该csv文件的内容举例如下:
url,website_type,subwebsite_type;
www.58.com,本地生活类,信息分类;
www.guazi.com,本地生活类,二手车交易。
任务编号Task_id是spider子模块读取以上csv配置文件后,为csv的每一条数据动态创建一个任务编号Task_id;比如以上csv文件有2条数据,spider子模块获得第一条数据后,知道要爬取目标网站url:www.58.com,则给这个爬取任务动态生成一个任务编号Task_id,例如0x45254。
爬虫采集节点重写scrapy.Spider对象的parse方法,创建DetailItem对象,首先将网站类型website_type、子网站类型subwebsite_type和任务编号Task_id保存到DetailItem中,然后通过XPath和正则表达式解析网页中的数据,并将解析到的网页数据也保存在DetailItem对象中。
爬虫采集节点在scrapy中注册Pipeline子模块,并在process_Item方法中获得DetailItem对象,然后将DetailItem对象中的网页数据按照字段名称Item_name、字段长度Item_len、字段数据Item_data的方式封装为Item数据,Item数据的格式如图3所示。
其中,字段名称Item_name的长度是固定值,当Item_name存储的数据超过固定值,则超出的部分将被截取,当Item_name存储的数据未超过固定值时,系统在数据的末尾自动添加若干空格,使数据的长度刚好等于固定值。
利用process_Item方法创建缓冲区,首先创建数据头,根据DetailItem对象中的数据,分别填写数据头的网站类型website_type、子网站类型subwebsite_type、任务编号Task_id字段和魔数区magic_num字段,数据头的结构格式如图3所示。
然后,将每个Item数据拼接为数据体,并计算数据体的长度len,最后将数据体的长度len填写到数据头的数据包长度content_len字段,形成完整的数据包,如图2所示。其中,魔数区magic_num字段为固定值0xEFEADBAB,其作用是方便数据解码节点定位到数据包的起始位置。
最后,利用process_Item方法向指定的数据解码节点的指定端口发送TCP请求,将数据包发送给数据解码节点。
作为本发明的一种实施例,如图3所示,本发明提供了一种数据包,其数据格式具体如下所述。
数据头按照格式[魔数区magic_num,任务编号Task_id,网站类型website_type,子网站类型subwebsite_type,数据包长度content_len]构成。
其中,魔数区magic_num为固定值0xEFEADBAB,用于确定数据包的起始位置,任务编号Task_id为通用唯一识别码(Universally Unique Identifier),由系统随机生成,用于标识不同的爬虫任务。
网站类型website_type表示爬取的web网站的类型,比如新闻类、电商类、社交类等。
网站名称website_name表示爬取的web网站名称,比如新浪、58等。
数据包长度content_len表示数据体的长度。
数据体由若干Item数据组成,每个Item数据按照格式[字段名称Item_name,字段长度Item_len,字段数据Item_data]构成。
其中,每个Item数据表示一条提取的指定网页数据,比如爬虫采集节点爬取到某网站上大华公司发布的一条招聘信息,则字段名称Item_name为“招聘公司”,字段数据Item_data为“大华公司”,字段长度Item_len为“大华公司”字符串的长度。
每一个Item数据都可以转换为key-value的结构,比如将上述招聘信息的Item数据转换为:<“招聘公司”,“大华公司”>。
字段名称Item_name的长度是固定值,当字段名称Item_name存储的数据超过固定值,则超出的部分将被截取,当字段名称Item_name存储的数据未超过固定值时,系统在数据的末尾自动添加若干空格,使数据的长度刚好等于固定值。
如图2所示,数据解码节点包括Decoder解码器子模块和Handler数据处理子模块,在数据采集过程中Decoder解码器子模块和Handler数据处理子模块的功能如下:
首先,数据解码节点启动TCP服务器,在指定的端口监听TCP连接请求,获取发自爬虫采集节点的数据包,由于每一个数据解码节点同若干个爬虫采集节点信号连接,因此,数据解码节点可接收来自不同爬虫采集节点的多个数据包。
然后,数据解码节点注册Decoder解码器子模块,该解码器读取ByteBuf中的数据,读取到0xEFEADBAB值后,认为已定位到数据包的起始位置,则进一步读取任务编号Task_id,网站类型website_type,子网站类型subwebsite_type,数据包长度content_len等字段。
Decoder解码器子模块根据数据包长度content_len创建临时缓冲区,将数据体的数据读取到临时缓冲区中;并在临时缓冲区接收到了完整的数据体后,将数据头和数据体发送给Handler数据处理子模块。
Handler数据处理子模块接收Decoder解码器子模块发送的数据头和数据体后,分别解析数据头和数据体。
首先,从数据头中解析任务编号Task_id、网站类型website_type和子网站类型subwebsite_type等数据。
再将数据体中的Item数据解析出来,然后对Item数据执行map操作,将其转变为key-value结构,并将所有的Item数据对应的key-value结构组装成Item哈希表,其中,Item哈希表由<
然后,Handler数据处理子模块创建Task哈希表,其中,Task哈希表的主键key由网站类型website_type+子网站类型subwebsite_type组合构成,Task哈希表的value为Item哈希表,其数据格式可表示为:
Handler数据处理子模块根据Task哈希表创建包含同一任务下所有数据的Event消息体,该Event消息体为哈希表,由<任务编号Task_id,Task哈希表>构成,数据格式表示为:
最后,数据解析模块将上述Event消息体发送到EventBus队列中,等待文件导出节点的监听接收。
如图2所示,文件导出节点包括shuffle子模块和文件管理子模块,在数据采集过程中shuffle子模块和文件管理子模块的功能如下:
首先,shuffle子模块监听EventBus队列并接收Event消息体,由于每一个文件导出节点和若干个数据解码节点信号连接,因此,shuffle子模块可以监听接收发自若干个数据解码节点的多个Event消息体。
例如,接收Event消息体1,解析Event消息体中1的任务编号Task_id1和Task哈希表1,并将Task哈希表1保存到临时缓冲区中;
接收Event消息体2,解析Event消息体中2的任务编号Task_id2和Task哈希表2。
然后,shuffle子模块分别对Task哈希表1和Task哈希表2执行Redcue操作,分别获得Task哈希表1和Task哈希表2的主键key,并比较主键key是否一致。
如果一致,则表示这两个Task哈希表保存的是同一个网站的Item数据。此时分别将Task哈希表1和Task哈希表2中主键key对应的Item哈希表取出,再将Task哈希表1和Task哈希表2的Item哈希表分别转换为对应的集合,并对这两个集合进行合并操作,删除重复的Item数据,形成相同主键key所对应的完整的汇总数据集合。
如果不一致,则不进行合并处理。
最后,文件管理子模块将汇总数据集合中每一个Item数据都转换为“key:value”字符串,在指定的目录下创建文件,将所有的“key:value”字符串保存到文件中。
实施例二:
本发明实施例提供了一种基于MapReduce算法的web数据采集方法,该web数据采集方法基于微服务技术、网络爬虫技术以及MapReduce算法。
微服务技术是一种分布式架构,数据处理如采集、MapReduce的Map(映射)操作和Reduce(归约)操作等由不同的节点承担。其中,爬虫采集节点用于采集网页数据并将网页数据协议封装为数据包,数据解码节点用于解析数据包,并构建哈希表,文件导出节点用于对哈希表进行汇总处理;
具体地,一个爬虫采集节点可以信号连接多个数据解码节点,一个数据解码节点可以信号连接多个文件导出节点,从而实现数据的多元化处理。
如图3所示,该web数据采集方法包括如下步骤:
步骤一:接收爬虫采集节点传送的网页数据经协议封装而成的数据包;
步骤二:解析获取的数据包,对解析后的数据包进行Map操作构建哈希表;
步骤三:向文件导出节点发送构建好的哈希表,以便于文件导出节点对哈希表进行Reduce操作获得同一网站的汇总数据集合,并将获得的汇总数据集合导出到文件中。
在步骤一中,爬虫采集节点获取网页数据的方法包括读取指定配置文件,获得指定网站的目标网站列表信息和任务编号,根据获取的上述目标网站列表信息向指定网站发起HTTP请求,获得并解析HTML网页获得指定网页数据,具体操作如下:
首先,爬虫采集节点读取指定配置文件,获得指定网站的URL地址列表和任务编号Task_id;
再向指定网站发起HTTP请求,获得HTML网页,使用xpath、正则表达式等技术解析网页内容,获得指定的网页数据;
然后,将采集到的网页数据封装到若干Item数据中,并将这些Item数据拼接为数据体,并计算出数据体的长度;填写网站类型website_type、子网站类型subwebsite_type字段和数据包长度content_len字段,生成相应的数据头。
如图3所示,将生成的数据头和数据体拼接成完整的数据包,数据包包括数据头和数据体;数据头包括魔数区,任务编号,网站类型,子网站类型和数据包长度;数据体包括若干Item数据,Item数据由所述网页数据按字段名称,字段长度和字段数据的格式封装而成。具体的,Item数据结构表示为:<字段名称,字段长度,字段数据>。
最后,向数据解码节点发起TCP连接,将数据包发送给数据解码节点。
在步骤二中,解析获取的数据包,对解析后的数据包进行Map操作构建哈希表的具体操作如下。
首先,数据解码节点收到若干数据包,并解析出对应的数据头和数据体的相关信息。
其中,解析数据头获得任务编号Task_id、网站类型website_type、子网站类型subwebsite_type、数据包长度content_len等字段。
对数据体执行map操作,将数据体中的Item数据解析出来,转变为key-value结构,将所有的Item数据对应的key-value结构组装成Item哈希表,其中,Item哈希表结构表示为:
<<
数据解析节点根据创建的Item哈希表创建Task哈希表,该Task哈希表的主键key由网站类型website_type+子网站类型subwebsite_type组合构成,Task哈希表的value为Item哈希表。具体的,Task哈希表结构表示为:
其中,Task_key为网站类型和子网站类型的组合,Task_value为Item哈希表,本发明实施例中一个Task哈希表代表一个特定网站所有指定数据的集合。
数据解析节点根据Task哈希表创建Event消息体,Event消息体为哈希表,包含了同一个任务下的所有网页数据,具体的,Event消息体结构为:
其中,Event_key为任务编号,Event_value为Task哈希表。
最后,数据解析节点将Event消息体发送到EventBus队列中,EventBus队列是一个基于观察者模式实现的消息中间件,用于线程间的通讯。
在步骤三中,对所述哈希表进行Reduce操作获得同一网站的汇总数据集合的方法包括如下步骤:
文件导出节点监听EventBus队列获得Event消息体;
文件导出节点解析Event消息体获取所对应的Task哈希表和对应的Item数据,并判断不同Event消息体所对应的Task哈希表的主键信息是否一致:
若一致,则合并主键信息相一致的Task哈希表并删除Task哈希表中重复的Item数据,形成相同主键信息的汇总数据集合;
若不一致,则不进行合并处理。
最后,文件导出节点将形成的汇总数据集合导出到指定的文件中。
需要说明的是,本发明的web数据采集方法中多个爬虫采集节点可以采集不同任务下的不同网站的各类信息,构成海量数据的数据来源;多个爬虫采集节点分别同多个数据解码节点信号连接,可理解为每个爬虫采集节点可以传送数据包至多个数据解码节点,每个数据解码节点可以接收来自多个不同爬虫采集节点传送的数据包;同理,每个数据解码节点可以向多个不同的文件导出节点传送哈希表,而每个文件导出节点同样可以接收来自多个不同数据解码节点的哈希表,并进行汇总导出。
实施例三:
本发明提供了一种web数据采集系统,包括处理器及存储介质;其中,存储介质用于存储指令;处理器用于根据存储指令进行操作以执行实施例二中所述方法的步骤。
实施例四:
本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现实施例二中所述方法的步骤。
综上可知,本发明提供的基于MapReduce算法的web数据采集方法、系统和存储介质能够借助分布式架构的微服务技术,并且对于互联网海量数据的数据采集、数据结构化、数据筛选汇总等处理过程由不同的模块或节点承担,通过MapReduce算法的Map操作和Reduce操作对采集到的网页数据进行数据解析、哈希表结构化、特定数据的筛选汇总和保存处理,实现对同一网站的数据的汇总导出,方法简单、扩展性强,适应多种应用场景;
通过封装协议构建包含数据头和数据体的数据包,数据包结构简单,使数据组织结构化,便于Map操作和Reduce操作,形成综合网页各类数据的哈希表以获得不同任务下同一网站的汇总数据集合,能够满足大规模Web数据采集的需要。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
机译: 用于处理机器学习算法MAPREDUCE环境的系统和方法
机译: 用MAPREDUCE环境处理机器学习算法的系统和方式
机译: 在mapreduce环境中处理机器学习算法的系统和方法