本发明专利技术实施例公开了一种精确提取网页内容的方法,具体步骤为:获取URL对应的网页内容,将所述网页内容源代码解析成DOM结构树;读取用户输入的筛选表达式,语法分析器加载语法表将所述筛选表达式解析成由多个词汇组成的表达式树,通过语义分析将所述多个词汇分解出筛选条件集合,所述筛选条件集合由若干个筛选条件对象组成,每个筛选条件对象由一个标签提取方法和若干个标签筛选方法组成。本发明专利技术实施例还公开了一种精确提取网页内容的系统。采用本发明专利技术,对筛选表达式的进行语法分析重组成优化表达式树,并通过语义分析组成多个筛选条件对象的集合,从而实现对DOM文档树节点的采集定位和快速筛选。使用本发明专利技术有利于提高开发效率、降低维护成本。
【技术实现步骤摘要】
本专利技术涉及互联网
,具体地说,尤其涉及一种精确提取网页内容的方法及系统。
技术介绍
网页数据采集技术是一种使用类似搜索引擎ROBOT的技术,把互联网上的文章,资料收集整理然后存储到数据库中以填充网站内容。数据采集技术对丰富网站内容,提高网站的流量有很大帮助。然而,现有技术中使用的数据采集方法大多数是使用正则表达式的方式来实现数据的定位和提取。使用这种方法是性能相对比较优异,但是对于整个系统的维护来说却非常不容易。要精确定位一个页面的数据,通常需要将页面的内容进行分段提取,这样写出来的正则表达式代码非常多,而且也难以维护。如果所要采集的页面的标签稍微发生变化,那么对应的正则表达式也需要重新调整,而整个调整却非常耗时间。在网页javascript脚本中,jquery框架所提供的标签选择器能够非常方便的筛选出页面中的标签,但是它却只能用于浏览器的客户端脚本。
技术实现思路
本专利技术实施例所要解决的技术问题在于,提供一种精确提取网页内容的方法。可适用于服器端,并能通过易维护的方式精确提取网页内容。为了解决上述技术问题,本专利技术实施例提供了一种精确提取网页内容的方法,经过以下步骤实现: 获取URL对应的网页文档,将所述网页文档源代码解析成DOM结构树;读取用户输入的筛选表达式,语法分析器加载语法表对所述筛选表达式的合法性分析并将所述筛选表达式解析成由多个词汇组成的表达式树;通过语义分析,将所述多个词汇分解出筛选条件集合;所述筛选条件集合由若干个筛选条件对象组成,每个筛选条件对象由一个标签提取方法和若干个标签筛选方法组成;所述标签提取方法从所述DOM结构树中提取所述筛选条件对象指定的对象,所述标签筛选方法根据所述筛选条件对象附带的标签过滤方法对所述标签提取方法所提取的对象做进一步过滤,得出所述筛选条件对象的筛选结果,将所述筛选结果返回。进一步地,还包括根据所述语法表的嵌套定义遍历所述表达式树将重复嵌套的父节点进行上位合并,重组成优化表达式树的步骤。更进一步地,所述重组成优化表达式树通过以下步骤实现:步骤1:构建堆栈变量STACK与结果列表LIST ;步骤2:将所述筛选表达式的节点压入栈;步骤3:读取栈顶的节点放入临时变量⑶R ;步骤4:判断CUR的头部标识,当所述头部标识为所述语法表所定义的非冗余节点,将其添加到LIST中,重复第3步骤,当其为所述语法表所定义的冗余节点时,继续下一步骤;步骤5:读取CUR当前节点下的所有节点按照从右到左出现的顺序依次压入栈,然后跳转到第3步骤继续下一个循环;步骤6:将结果列表LIST返回。进一步地,所述标签提取方法是以层次关键字从所述DOM结构树中提取指定类别及关键字的对象。更进一步地,所述层次关键字为空格、大于号、加号和波浪号;所述空格表示在给定的祖先元素下匹配所有的后代元素,所述大于号表示在给定的父元素下匹配所有的子元素,所述加号表示匹配所有紧接在prev元素后的next元素,所述波浪号表示匹配prev元素之后的所有siblings元素。进一步地,所述解析成DOM结构树步骤还包括根据网页文档上所指定的<! D0CTYPE>声明对标签进行·容错处理。更进一步地,所述对所述筛选条件合法性分析是对所述筛选条件中的词法与语法错误进行检测,当出现错误时就抛出异常并终止操作。相应地,本专利技术实施例还提供了一种精确提取网页内容的系统,包括预处理模块、表达式获取模块、表达式解析模块、语义分析模块;所述预处理模块获取URL对应的网页文档,将其解析成DOM结构树;所述表达式获取模块读取用户输入的筛选表达式;所述表达式解析模块加载语法表对所述筛选表达式解析成由多个词汇组成的表达式树,并根根据所述语法表的嵌套定义遍历所述表达式树将重复嵌套的父节点进行上位合并,重组成优化表达式树;所述语义分析模块将所述表达式树分解出筛选条件集合,所述筛选条件集合由若干个筛选条件对象组成,每个筛选条件对象由一个标签提取方法和若干个标签筛选方法组成;所述标签提取方法从所述DOM结构树中提取所述筛选条件对象指定的对象,所述标签筛选方法根据所述筛选条件对象附带的标签过滤方法对所述标签提取方法所提取的对象做进一步过滤,得出所述筛选条件对象的筛选结果,将所述筛选结果返回。进一步地,所述预处理模块还包括容错处理单元,用于根据网页文档上所指定的<!D0CTYPE>声明对DOM结构树中的标签进行容错处理。更进一步地,所述表达式获取模块还包括筛选条件合法性分析单元,用于对所述筛选条件中的词法与语法错误进行检测,当出现错误时就抛出异常并终止操作。实施本专利技术实施例,具有如下有益效果:通过将目标网页文档生成DOM结构树,并对用户输入的筛选表达式解析成表达式树,并通过语义分析组成多个筛选条件对象的集合,从而实现对DOM文档树节点的采集定位和快速筛选。使用本专利技术有利于提高开发效率、降低维护成本。附图说明图1是本专利技术示出一个未优化的SelectorBlocks子树的示意图2是将图1中的表达式树优化的结果的示意图;图3是实施例1中未经优化的表达式树的示意图;图4是将实施例1的表达式树进行优化后的示意图;图5是实施例2中未经优化的表达式树的示意图;图6是示出可将实施例2中未经优化的表达式树优化后的结构示图;图7是将实施例2的表达式树进行优化后的示意图;图8是本专利技术的系统结构示意图。具体实施例方式为使本专利技术的目的、技术方案和优点更加清楚,下面将结合附图对本专利技术作进一步地详细描述。本专利技术的精确提取网页的方法,是根据URL获取得到对应的网页文档,将该网页文档源代码信息解析成DOM结构树,并根据网页文档中的〈!D0CTYPE〉声明对标签进行容错处理。DOM结构树是一棵标签树,反应了网页的结构信息,为了简化采集定位,提高开发效率,本专利技术引入了对用户输入的筛选表达式进行优化并且定义了标签提取方法来提升网页内容的精确提取。读取用户输入的筛选表达式,逐个进行解析成由多个词汇组成的表达式树,在解析过程中如果出现词法错误(Lexical Error)或者语法错误(Syntax Error)就抛出异常,并终止操作。 例如当语法表定义包含如下时:<SelectorBlocks>::=〈SelectorBlocks>,, ’〈Selectors〉I〈Selectors〉表示〈SelectorBlocks〉是由多个〈Selectors〉组成,在未重构前的表达式树会形成多个冗余嵌套的SelectorBlocks子树,如图1所示,这时将这些冗余嵌套的子树进行上位合并优化将可使后续的语义分析步骤更为方便处理,优化后表达式树结构如图2所示的示意图,具体优化处理步骤为:遍历整个表达式树,经以下步骤进行表达式重组成优化表达式树:步骤1:构建堆栈变量STACK与结果列表LIST ;步骤2:将所述表达式的节点压入栈;步骤3:读取栈顶的节点放入临时变量⑶R ;步骤4:判断⑶R的头部标识,当所述头部标识为〈Selectors〉节点时,将其添加到LIST中,重复第3步骤,当其为〈SelectorBlocks〉节点时,继续下一步骤;步骤5:读取QJR的所有子节点并筛选出〈SelectorBlocks〉和〈Selecor〉节点,按照从右到左出现的顺序依本文档来自技高网...
【技术保护点】
一种精确提取网页内容的方法,其特征在于,具体步骤如下:获取URL对应的网页文档,将所述网页文档源代码解析成DOM结构树;读取用户输入的筛选表达式,语法分析器加载语法表对所述筛选表达式的合法性分析并将所述筛选表达式解析成由多个词汇组成的表达式树;通过语义分析,将所述多个词汇分解出筛选条件集合;所述筛选条件集合由若干个筛选条件对象组成,每个筛选条件对象由一个标签提取方法和若干个标签筛选方法组成;所述标签提取方法从所述DOM结构树中提取所述筛选条件对象指定的对象,所述标签筛选方法根据所述筛选条件对象附带的标签过滤方法对所述标签提取方法所提取的对象做进一步过滤,得出所述筛选条件对象的筛选结果,将所述筛选结果返回。
【技术特征摘要】
1.一种精确提取网页内容的方法,其特征在于,具体步骤如下: 获取URL对应的网页文档,将所述网页文档源代码解析成DOM结构树; 读取用户输入的筛选表达式,语法分析器加载语法表对所述筛选表达式的合法性分析并将所述筛选表达式解析成由多个词汇组成的表达式树; 通过语义分析,将所述多个词汇分解出筛选条件集合; 所述筛选条件集合由若干个筛选条件对象组成,每个筛选条件对象由一个标签提取方法和若干个标签筛选方法组成;所述标签提取方法从所述DOM结构树中提取所述筛选条件对象指定的对象,所述标签筛选方法根据所述筛选条件对象附带的标签过滤方法对所述标签提取方法所提取的对象做进一步过滤,得出所述筛选条件对象的筛选结果,将所述筛选结果返回。2.根据权利要求1所述的精确提取网页内容的方法,其特征在于,还包括根据所述语法表的嵌套定义遍历所述筛选表达式树将重复嵌套的父节点进行上位合并,重组成优化表达式树的步骤。3.根据权利要求2所述的精确提取网页内容的方法,其特征在于,所述重组成优化表达式树通过以下步骤实现: 步骤1:构建堆栈变量STACK与结果列表LIST ; 步骤2:将所述筛选表达式的节点压入栈; 步骤3:读取栈顶的节点放入临时变量CUR ; 步骤4:判断CUR的头部标识,当所述头部标识为所述语法表所定义的非冗余节点,将其添加到LIST中,重复第3步骤,当其为所述语法表所定义的冗余节点时,继续下一步骤;步骤5:读取CUR当前节点下的所有节点按照从右到左出现的顺序依次压入栈,然后跳转到第3步骤继续下一个循环; 步骤6:将结果列表LIST返回。4.根据权利要求1所述的精确提取网页内容的方法,其特征在于,所述标签提取方法是以层次关键字从所述DOM结构树中提取指定类别及关键字的对象。5.根据权利要求4所述的精确提取网页内容的方法,其特征在于,所述层次关键字为空格、大于号、加号和波浪号;所述空格表示在给定的祖先元素下匹配所有的后代元...
【专利技术属性】
技术研发人员:翁杰,
申请(专利权)人:翁杰,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。