用于提高网络爬虫稳定性、可用性的数据处理方法及装置与流程

文档序号:12465979阅读:206来源:国知局
本发明涉及数据处理
技术领域
:,具体涉及一种用于提高网络爬虫稳定性、可用性的数据处理方法及装置。
背景技术
::随着互联网的普及和发展,电子商务网站,门户网站,博客,微博等各种类型的信息都发布在互联网上,人们可以通过互联网搜集海量资讯并进行分析、统计,以获取需要的信息。现有的方法是采用网络爬虫技术获取信息,除去图片、视频等二进制内容,网络爬虫一般获取的是网页文本内容,传统爬虫使用正则表达式、xpath或者位置进行信息的解析。但存在的问题是,网页是动态变化的,比如:业务字段名/字段值的位置、html的标签id、xpath路径可能随时会发生变化。网页的动态特性决定了网络爬虫频繁维护的特性,因此,现有的网络爬虫普适性差、维护成本很高。技术实现要素:针对现有技术中的缺陷,本发明提供的用于提高网络爬虫稳定性、可用性的数据处理方法及装置,可以自动识别网页页面的非结构性变化,并采用自适应的数据抽取逻辑,无须频繁维护。第一方面,本发明提供的一种用于提高网络爬虫稳定性、可用性的数据处理方法,包括:步骤S1,根据事先指定的特征,判断当前页面是否发生了局部结构性变动;步骤S2,若未发生结构性变动,则获取所述当前页面的结构布局,根据所述当前页面的结构布局解析所述当前页面中的内容;步骤S3,根据预先配置的映射规则,对通过解析获取的业务字段名做自适应映射,并存储到存储区。本发明提供的用于提高网络爬虫稳定性、可用性的数据处理方法,可以自动识别网页页面的非结构性变化,并采用自适应的数据抽取逻辑,无须频繁维护,节约了成本,同时提高了网页数据爬取的稳定性,具备更好的普适性。优选地,所述步骤S1包括:逐一比对事先指定的特征和当前页面的对应标签,若不一致,则认为所述当前页面发生了局部结构性变动。优选地,所述步骤S2包括:获取所述当前页面的HTML文件;从所述HTML文件抽取出Table标签中的内容和div标签中的内容;根据所述Table标签中的内容获取所述当前页面的结构布局,根据所述当前页面的结构布局解析内容;根据所述div标签中的内容获取所述当前页面的结构布局,根据所述当前页面的结构布局解析内容。优选地,所述根据所述Table标签中的内容获取所述当前页面的结构布局,根据所述当前页面的结构布局解析内容,包括:检测所述Table标签中的标题部分;抽取所述Table标签中除标题部分的多维度信息;根据抽取的所述多维度信息判断结构布局;根据所述结构布局获取业务数据。优选地,所述根据所述div标签中的内容获取所述当前页面的结构布局,根据所述当前页面的结构布局解析内容,包括:从所述div标签中获取与已知业务字段名匹配的label,并根据匹配到的label在div标签中的位置判断结构布局,根据结构布局获取业务数据。第二方面,本发明提供的一种用于提高网络爬虫稳定性、可用性的数据处理装置,包括:结构性变动检测模块,用于根据事先指定的特征,判断当前页面是否发生了局部结构性变动;解析模块,用于若未发生结构性变动,则获取所述当前页面的结构布局,根据所述当前页面的结构布局解析所述当前页面中的内容;字段自适应调整模块,根据预先配置的映射规则,对通过解析获取的业务字段名做自适应映射,并存储到存储区。本发明提供的用于提高网络爬虫稳定性、可用性的数据处理装置,可以自动识别网页页面的非结构性变化,并采用自适应的数据抽取逻辑,无须频繁维护,节约了成本,同时提高了网页数据爬取的稳定性,具备更好的普适性。优选地,所述结构性变动检测模块具体用于:逐一比对事先指定的特征和当前页面的对应标签,若不一致,则认为所述当前页面发生了局部结构性变动。优选地,所述解析模块具体用于:获取所述当前页面的HTML文件;从所述HTML文件抽取出Table标签中的内容和div标签中的内容;根据所述Table标签中的内容获取所述当前页面的结构布局,根据所述当前页面的结构布局解析内容;根据所述div标签中的内容获取所述当前页面的结构布局,根据所述当前页面的结构布局解析内容。优选地,所述解析模块中,根据所述Table标签中的内容获取所述当前页面的结构布局,根据所述当前页面的结构布局解析内容,包括:检测所述Table标签中的标题部分;抽取所述Table标签中除标题部分的多维度信息;根据抽取的所述多维度信息判断结构布局;根据所述结构布局获取业务数据。优选地,所述解析模块中,根据所述div标签中的内容获取所述当前页面的结构布局,根据所述当前页面的结构布局解析内容,包括:从所述div标签中获取与已知业务字段名匹配的label,并根据匹配到的label在div标签中的位置判断结构布局,根据结构布局获取业务数据。附图说明图1为本发明实施例所提供的用于提高网络爬虫稳定性、可用性的数据处理方法的流程图;图2为一个示例性表格中的标题部分、备注部分以及业务数据部分的布局;图3为纵向多TL布局的示例;图4为横向多TL布局的示例;图5为对多TL布局的表格进行切割合并的一个示例;图6为对多TL布局的表格进行切割合并的一个示例;图7为对单TL(多级)布局的表格进行处理的一个示例;图8为本发明实施例所提供的用于提高网络爬虫稳定性、可用性的数据处理装置的结构框图。具体实施方式下面将结合附图对本发明技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本发明的技术方案,因此只是作为示例,而不能以此来限制本发明的保护范围。需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本发明所属领域技术人员所理解的通常意义。网页中的表格由HTML中的<table>标签来定义。表格的行由<tr>标签定义,<tr>必须在一个<table></table>里面,不能单独使用。每行被分割为若干单元格,每个单元格由<td>标签定义,<td>需要嵌套在<tr></tr>中间。<th>和<td>一样也是需要嵌套在<tr>当中的,<th>...</th>用来定义表头单元格,包含的是表头信息。具体用法如下:上述代码在网页中显示的表格如下所示:姓名年龄张三40HTML中的div标签用来定义文档中的分区或节(division/section)。<div>标签可以把文档分割为独立的、不同的部分。它可以用作严格的组织工具,并且不使用任何格式与其关联。本实施例提供了一种用于提高网络爬虫稳定性、可用性的数据处理方法,如图1所示,包括:步骤S1,根据事先指定的特征,判断当前页面是否发生了局部结构性变动。其中,事先指定的特征是指网页的结构布局,在HTML中表现为标签的类型、位置、属性等。结构性变动是指页面的结构布局发生了变化,比如:某个标签不见了,某个标签的属性发生了变化,或者Table行数、列数变了等。步骤S2,若未发生结构性变动,则获取当前页面的结构布局,根据当前页面的结构布局解析当前页面中的内容。步骤S3,根据预先配置的映射规则,对通过解析获取的业务字段名做自适应映射,并存储到存储区。其中,业务字段名是指每项业务数据的标题名,如图2中的“执行法院”、“执行案号”等。自适应映射是指将解析获取的业务字段名替换为预定的标准字段,以统一抽取数据的业务字段名,方便后续数据的管理和统计。例如将“企业名称”、“机构名称”自动映射为存储层的“公司名称”。本实施例提供的用于提高网络爬虫稳定性、可用性的数据处理方法,可以自动识别网页页面的非结构性变化,并采用自适应的数据抽取逻辑,无须频繁维护,节约了成本,同时提高了网页数据爬取的稳定性,具备更好的普适性。其中,步骤S1具体包括:逐一比对事先指定的特征和当前页面的对应标签,若不一致,则认为当前页面发生了局部结构性变动。HTML中可能包含有多种类型的标签,如Table标签、div标签。不同标签的提取方法不同,为了能够适应混合型的HTML,步骤S2具体包括:步骤S21,获取当前页面的HTML文件。步骤S22,从HTML文件抽取出Table标签中的内容和div标签中的内容。步骤S23,根据Table标签中的内容获取当前页面的结构布局,根据当前页面的结构布局解析内容。步骤S24,根据div标签中的内容获取当前页面的结构布局,根据当前页面的结构布局解析内容。网页上的表格采用HTMLTable标签的方式进行编辑,这些信息大多是半结构化数据虽然在页面上的显示效果较为规整,但是底层标签及数据并不规整,甚至非常混乱,导致标题部分和与业务数据混杂在一起,无法快速准确地抽取业务数据。为了自动、快速、准确地提取网页表格中的数据,步骤S23具体包括:步骤S231,检测Table标签中的标题部分。如图2所示,表格标题部分通常都是一个大的合并单元格,可能是一行或多行,表格还可以包含备注部分,备注部分的结构与标题部分类似,除去表格的标题部分和备注部分,其余部分就是需要提取的业务数据。当表格中存在备注部分时,步骤S1中还需要检测备注部分,检测方式与标题部分的检测方式相同。步骤S232,抽取Table标签中除标题部分的多维度信息。其中,多维度信息包括:直接内容、th/td分布、class属性分布、background-color属性分布等。直接内容为网页中表格中直接显示的内容,即<table>标签中的文本内容,如“姓名”、“年龄”、“张三”、“40”。th/td分布指th和td标签在这个table中的分布位置。class属性规定单元格中元素的类名,class属性分布是指class属性在这个table中的分布位置。background-color属性规定了单元格的背景颜色,background-color属性分布是指background-color属性在这个table中的分布位置。步骤S233,根据抽取的多维度信息判断结构布局。其中,常见的表格布局分为横向单TL、横向多TL、纵向单TL、纵向多TL、多表组合。TL(TitleLine)为列头(或数据标题部分)(可能物理上是多行,但逻辑上是一个区域),表示各项业务数据的标题,如图2中的业务数据部分的第一行及为TL。TL可以是横向的,也可以是纵向的,如图3所示为纵向多TL布局,图4为横向多TL布局。步骤S234,根据结构布局获取业务数据。步骤S23提供了自适应抽取HTMLTable标签中结构化信息的方法,首先检测Table标签中的标题部分,排除了不属于业务数据部分的内容,防止无用数据的混入;然后抽取Table标签中除标题部分的多维度信息,根据多维度信息综合判断表格的结构布局,由于Table标签中的信息能够反映表格布局,因此,无论网页中的表格发生了怎样的改变,通过对Table标签中的信息进行分析,均可以得到新的表格布局。因此,步骤S23提供的方法,无需提前获知表格的布局,针对不同结构的HTMLTable无需在重新编写程序,解决了现有的Table抽取算法缺乏普适性的问题,同时提高了抽取数据的可靠性,尤其对大规模半结构化数据识别和抽取时更为有效。标题部分和备注部分一般都在表格的第一行或第二行,且是一个合并单元格,因此,步骤S231的具体实现方式包括:在Table标签中检测每一行是否为一个合并单元格,若是,则被检测的行属于标题部分,并进行下一行的检测;若不是,表示该行开始是业务数据,则停止标题部分的检测。例如,标题部分和备注部分的代码一般为以下形式:<tr><tdcolspan=’5’>2016年人口信息统计表</td></tr>上述代码只包含一个<td>标签,而且colspan=’5’表明这是一个合并单元格,通过检测<td>和colspan就能与业识别标题部分和备注部分。现有技术,在滤除无用数据(如标题部分、备注部分)时,需要预先知道无用数据的位置,然后在程序中指定好位置以便跳过前几行无用数据。而本实施例的方法更具有通用性,无论表格有多少行标题部分和备注部分,都可以准确高效地对其进行检测,以保证能够准确地抽取到业务数据。在抽取数据过程中,除直接获取常规单元格对应信息外,还需要对合并单元格做特别处理,使抽取的数据满足存储格式,方便后续处理,因此,步骤S232的优选方式包括:抽取Table标签中除标题部分(有备注部分的话,还包括备注部分)的多维度信息,对被抽取信息中的合并单元格进行拆分后,再将每个维度的信息分别以二维数组形式存储,并对拆分的单元格做特殊标记。其中,合并单元格又分为横向合并(colspan)、纵向合并(rowspan)、混合合并(colspan+rowspan)。例如:对<tdcolspan=’5’bgcolor="#F7FBFE">ABC</td>抽取直接内容后:ABC{←}{←}{←}{←}其中,特殊标记“{←}”是提取直接内容特有的,表示该单元格中的内容与其左边单元格中的内容相同,目的是为了给TL的处理和最终内容输出提供灵活性,而其它数据的抽取不需要做特殊标记。抽取‘background-color属性分布’为:#F7FBFE#F7FBFE#F7FBFE#F7FBFE#F7FBFE对于单行存在多个横向合并(colspan)的情况,还需要注意坐标平移的问题。例如<tdcolspan=’2’>ABC</td><tdcolspan=’3’>DEF</td>ABC{←}DEF{←}{←}对于纵向合并(rowspan)、混合合并(colspan+rowspan)也采用类似的方法进行数据抽取。只有获知表格布局,才能准确地提取到业务数据,并根据表格布局将表格转化为结构化数据。步骤S233中的判断表格布局包括以下几种操作:(1)根据抽取的直接内容,排除不是TL的行和列。根据TL中直接内容的数据类型、长度、关键词进行排除性判断。其判断依据包括:TL每个单元格中的字段名长度不可能超过阈值(比如说50),TL的字段名个数不可能超过阈值(比如1000个),字段名不可能是纯数字字符串,常见的字段名包括“名称”、“Name”、“地址”、“Address”、“地址”、“类型”、“备注”等关键词,根据常见的表格统计得到关键词库,检测行或列中是否包含关键词库中的关键词。因此,基于直接内容进行表格布局判断的具体实现步骤为:逐行、逐列检测抽取的直接内容;若直接内容的数据类型是数字型字符串,则直接内容所在行或列就不是TL;若直接内容的字段长度超过第一阈值,则直接内容所在行或列就不是TL;若一行或一列的多项直接内容中包含给定的关键词,则行或列是TL。其中,在使用基于关键词的判断方法时,为了保证判断可靠性,至少需要出现两个关键词才可以认定该行或列为TL。(2)根据抽取的background-color属性分布,判断表格布局。表格显示时,为了给用户提供阅读的便利性,表格TL的背景色和数据的背景色会不同,或者数据的奇偶行会采用交错的背景色,因此,background-color属性分布可以用来判断哪些行或列可能是TL,进而判断表格布局是横向还是纵向的。(3)根据抽取的class属性分布,判断表格布局。有相同class属性的单元格一般是同类的单元格。若所有行单元格的class属性均相同,则表格布局为横向布局;若所有行单元格的class属性均相同,则表格布局为纵向布局,因此,通过class属性分布可以判断是横向还是纵向的。(4)根据同一行或同一列中的直接内容的数据类型是否相同,判断表格布局。表格的业务数据中除去TL部分,TL的各个字段名下的单元格的数据只要不是空值的,它们的类型应该都是相同的(该方法只能区分开‘纯数字型字符串’、‘日期时间型字符串’、‘无明显特征字符串’)。例如图2中的表格为横向布局,其中业务数据部分,除了第一行TL,其余每一列单元格的数据类型都是相同的,如字段名“序号”这一列都是纯数字型字符串,字段名“执行法院”这一列都是‘无明显特征字符串’,字段名“执行案号”这一列都是‘无明显特征字符串’,总之,除TL行外,各列的数据类型都是相同的。根据上述特性,检测同一行的数据类型是否都相同,若该表格所有行的数据类型都相同(即同一行中所有单元格的数据类型要么都为‘纯数字型字符串’,要么都为‘日期时间型字符串’或‘无明显特征字符串’),则该表格为纵向布局;检测同一列的数据类型是否都相同,表格所有列的数据类型都相同(即同一列中所有单元格的数据类型要么都为‘纯数字型字符串’,要么都为‘日期时间型字符串’或‘无明显特征字符串’),则该表格为横向布局。有些单元格会存在空值的情况,为避免这些单元格影响检测结果,在对行和列做检测时,内容为空的单元格不纳入检测范围。表格业务数据部分的数据量一般较多,对所有行和列都进行检测会降低判断效率,因此,可以采用短路判断,即如果新的一行的判断结果能否定某种布局,则可以跳出判断。(5)根据th/td分布,判断表格布局。TL的单元格数量小于或等于其它行的单元格数量,非TL的单元格数量应当比较统一。根据th/td分布统计所有行和列的单元格数量,单元格数量明显少的行或列就可能是TL,并根据TL是横向还是纵向,TL的数量就可以得到表格布局了。th一般用来定义标题,对应的就是‘姓名’、‘年龄’这样的字段名。th的布局也可能有横向、纵向的区别,如横向布局为<thcolspan=’3’>成绩表</th>,纵向布局为<throwspan=’3’>成绩表</th>。td可以用来定义普通的单元格,也可以用来定义标题。同时有th标签和td标签时,根据th分布判断表格布局。但是很多table不会指定th,此时根据td分布判断表格布局。上述几种判断表格布局的方法可以根据实际需求进行各种组合后,对表格布局进行判断,提高判断准确率;另外,本实施例的方法能够识别表格中的多TL的情况,提高抽取数据的可靠性。对于表格布局为纵向布局的情况,还需要将直接内容形成的表格转置为横向布局。TL又分为单级TL、多级TL两种,但在未做特别说明的情况下,都统称为TL。如图2所示,只有一个TL且为单级TL。如图7所示,只有一个TL且为多级TL(由多行组成,有上下级的隶属关系),需对这多行中的字段名进行合并,形成单行字段名输出。如图7所示,原表格中TL分为两部分,左边部分为多行(多级),右边部分为单行,多级部分的第一级是合并单元格,字段名为‘基本信息’,多级部分的第二级是‘姓名’、‘年龄’、‘性别’字段,最终输出单级TL,它的结构为“基本信息_姓名”、“基本信息_年龄”、“基本信息_性别”、“其他字段A”、“其他字段B”。对于表格布局为多TL的情况,还需要对直接内容形成的表格做切割合并操作,将其转换为单TL的布局,以满足结构化数据的格式要求。切割合并操作包括:比较多个TL的直接内容;内容相同的TL只保留一行TL,如图5所示;将内容不同的TL拼接成一行TL,如图6所示。最后,对于合并单元格,可根据业务需要,修正特殊标记。例如ABC{←}{←}{←}{←}可调整为以下格式:ABCABCABCABCABC上述自适应抽取HTMLTable标签中结构化信息的方法是针对单个表格的提取方法,当网页中存在多个Table标签(多个表格)时,只需重复使用上述自适应抽取HTMLTable标签中结构化信息的方法,抽取每个Table标签对应的表格,然后按预定的规则将抽取结果进行合并即可。针对div布局的数据抽取,步骤S24具体包括:从div标签中获取与已知业务字段名匹配的label,并根据label在div标签中的位置判断结构布局,根据结构布局获取业务数据。其中,已知业务字段名可以是预先给定,或根据解析的历史数据统计得到。Label为div标签中的字段名,如示例一中的“姓名”、“年龄”和“性别”。示例一和示例二为div布局的表格。比如,根据已知业务字段名从div标签中抽取出“姓名”、“年龄”和“性别”这三个字段名,在示例一中,抽取的label均在右侧的标签内,则可以确定该表格的结构布局是左右的键值布局(纵向布局);而在示例二中,抽取的label均在一行标签内,则可以确定该表格的结构布局是上下布局(横向布局)。示例一<div><div>姓名</div><div>张三</div></div><div><div>年龄</div><div>18</div></div><div><div>性别</div><div>男</div></div>示例二<div><div>姓名</div><div>年龄</div><div>性别</div></div><div><div>张三</div><div>18</div><div>男</div></div>基于与上述用于提高网络爬虫稳定性、可用性的数据处理方法相同的发明构思,本实施例还提供了一种用于提高网络爬虫稳定性、可用性的数据处理装置,如图8所示,包括:结构性变动检测模块,用于根据事先指定的特征,判断当前页面是否发生了局部结构性变动;解析模块,用于若未发生结构性变动,则获取当前页面的结构布局,根据当前页面的结构布局解析当前页面中的内容;字段自适应调整模块,根据预先配置的映射规则,对通过解析获取的业务字段名做自适应映射,并存储到存储区。本实施例提供的用于提高网络爬虫稳定性、可用性的数据处理方法,可以自动识别网页页面的非结构性变化,并采用自适应的数据抽取逻辑,无须频繁维护,节约了成本,同时提高了网页数据爬取的稳定性,具备更好的普适性。进一步地,结构性变动检测模块具体用于:逐一比对事先指定的特征和当前页面的对应标签,若不一致,则认为当前页面发生了局部结构性变动。进一步地,解析模块具体用于:获取当前页面的HTML文件;从HTML文件抽取出Table标签中的内容和div标签中的内容;根据Table标签中的内容获取当前页面的结构布局,根据当前页面的结构布局解析内容;根据div标签中的内容获取当前页面的结构布局,根据当前页面的结构布局解析内容。进一步地,解析模块中,根据Table标签中的内容获取当前页面的结构布局,根据当前页面的结构布局解析内容,包括:检测Table标签中的标题部分;抽取Table标签中除标题部分的多维度信息;根据抽取的多维度信息判断结构布局;根据结构布局获取业务数据。进一步地,解析模块中,根据div标签中的内容获取当前页面的结构布局,根据当前页面的结构布局解析内容,包括:从div标签中获取与已知业务字段名匹配的label,并根据匹配到的label在div标签中的位置判断结构布局,根据结构布局获取业务数据。最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1