页面检测方法及客户端
技术领域
本发明涉及页面检测领域,特别是涉及一种页面检测方法及客户端。
背景技术
随着网络科技的发展,功能更加完善的第二代互联网越来越受到人们的青睐。因此,根据第二代互联网制作相关内容的网站也逐渐增多。但现有技术中基于第一代互联网开发的爬虫引擎无法适应根据第二代互联网制作相关内容的网站。例如基于第一代互联网开发的爬虫引擎无法抓取大部分基于第二代互联网制作相关内容的网站的链接,不能够自动获取和/或触发基于第二代互联网自制相关内容的网站的异步事件和其他事件。
因此,现有技术中基于第一代互联网开发的爬虫引擎无法全面对页面进行检测,进而造成对用户的检索操作造成不良影响等后果。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的页面检测方法和相应的客户端。
依据本发明的一个方面,提供了一种页面检测方法,包括:在针对网络进行旁路侦听的过程中抓取数据请求包,其中,所述数据请求包至少包括超文本传输协议请求包;确定所述数据请求包对应的链接是否为新链接,其中,所述新链接为链接库中未保存的链接;若是,利用所述对应的链接生成待爬虫库;提取所述待爬虫库中的任一链接:获取与所述任一链接对应的页面;提取所述页面的所有节点;根据所述所有节点检测所述页面是否包含所述新链接;当检测结果为是,获取所述新链接,并添加至所述待爬虫库,以供后续执行页面检测使用。
可选地,根据所述所有节点检测所述页面是否包含所述新链接,包括:提取所述所有节点中的所有动态节点,其中,所述动态节点包括HTML节点;获取与所述所有动态节点一一对应的属性值;根据所述属性值检测所述所有动态节点中是否包含新链接;若是,则所述页面包含所述新链接;若否,则所述页面不包含所述新链接。
可选地,根据所述属性值检测所述所有动态节点中是否包含新链接,包括:根据所述属性值获取所述所有动态节点包含的所有事件,并保存至事件库;遍历所述事件库,依次触发所述事件库中的任一事件;判断所述触发操作是否生成所述新链接;若是,则所述所有动态节点中包含所述新链接;若否,则所述所有动态节点中不包含所述新链接。
可选地,依次触发所述事件库中的任一事件,包括:根据事件的类型选择相应的函数来触发所述事件。
可选地,所述根据事件的类型选择相应的函数来触发所述事件,包括:若所述事件的类型为鼠标单击事件,调用由Chrome浏览器的WebKit::WebElement提供的鼠标单击函数来触发所述鼠标单击事件。
可选地,根据所述属性值获取所述所有动态节点包含的所有事件,包括:提取所述属性值中任一属性值;根据所述任一属性值判断与其对应的动态节点中是否包含事件;若是,保存所述事件至事件库,并重复所述提取操作以及所述判断操作,直至保存所述所有动态节点包含的所有事件至事件库;若否,直接重复所述提取操作以及所述判断操作,直至保存所述所有动态节点包含的所有事件至事件库。
可选地,根据所述任一属性值判断与其对应的动态节点中是否包含事件,包括:通过调用Chrome浏览器的WebCore::EventTarget::hasEventListeners()函数判断与所述任一属性值对应的动态节点是否包含事件。
可选地,提取所述所有节点中的所有动态节点之后,还包括:获取与所述所有动态节点一一对应的链接;判断所述对应的链接是否为所述新链接;若是,添加所述新链接至所述待爬虫库,以供后续执行页面检测使用。
可选地,获取与所述任一链接对应的页面之后,还包括:在所述待爬虫库中删除所述任一链接。
依据本发明的另一方面,还提供了一种页面检测客户端,包括:生成模块,包括抓取单元、确定单元以及生成单元,其中,所述抓取单元,适于在针对网络进行旁路侦听的过程中抓取数据请求包,其中,所述数据请求包至少包括超文本传输协议请求包;所述确定单元,适于确定所述数据请求包对应的链接是否为新链接,其中,所述新链接为链接库中未保存的链接;所述生成单元,适于若是,利用所述对应的链接生成待爬虫库;提取模块,适于提取所述待爬虫库中的任一链接;获取模块,适于获取与所述任一链接对应的页面;所述提取模块,还适于提取所述页面的所有节点;检测模块,适于根据所述所有节点检测所述页面是否包含所述新链接;添加模块,适于当检测结果为是,获取所述新链接,并添加至所述待爬虫库,以供后续执行页面检测使用。
可选地,所述页面检测客户端还包括:所述提取模块,还适于提取所述所有节点中的所有动态节点,其中,所述动态节点包括HTML节点;所述获取模块,还适于获取与所述所有动态节点一一对应的属性值;所述检测模块,还适于根据所述属性值检测所述所有动态节点中是否包含新链接;确定模块,适于若是,则所述页面包含所述新链接;以及,若否,则所述页面不包含所述新链接。
可选地,所述检测模块还适于:根据所述属性值获取所述所有动态节点包含的所有事件,并保存至事件库;遍历所述事件库,依次触发所述事件库中的任一事件;判断所述触发操作是否生成所述新链接;若是,则所述所有动态节点中包含所述新链接;若否,则所述所有动态节点中不包含所述新链接。
可选地,所述检测模块还适于:根据事件的类型选择相应的函数来触发所述事件。
可选地,所述检测模块还适于:若所述事件的类型为鼠标单击事件,调用由Chrome浏览器的WebKit::WebElement提供的鼠标单击函数来触发所述鼠标单击事件。
可选地,所述检测模块还包括:提取单元,适于提取所述属性值中任一属性值;判断单元,适于根据所述任一属性值判断与其对应的动态节点中是否包含事件;处理单元,适于若是,保存所述事件至事件库,并处罚所述提取单元重复所述提取操作以及后续操作,直至保存所述所有动态节点包含的所有事件至事件库;若否,直接处罚所述提取单元重复所述提取操作以及后续操作,直至保存所述所有动态节点包含的所有事件至事件库。
可选地,所述判断单元还适于:通过调用Chrome浏览器的WebCore::EventTarget::hasEventListeners()函数判断与所述任一属性值对应的动态节点是否包含事件。
可选地,所述页面检测客户端还包括:所述获取模块,还适于获取与所述所有动态节点一一对应的链接;所述检测模块,还适于判断所述对应的链接是否为所述新链接;所述添加模块,还适于若是,添加所述新链接至所述待爬虫库,以供后续执行页面检测使用。
可选地,所述页面检测客户端还包括:删除模块,适于所述获取模块获取与所述任一链接对应的页面之后,在所述待爬虫库中删除所述任一链接。
依据本发明实施例提供的页面检测方法,能够在针对网络进行旁路侦听的过程中抓取数据请求包,确定数据请求包对应的链接是否为新链接。当确定数据请求包对应的链接为新链接,则利用对应的链接生成待爬虫库。生成待爬虫库之后,提取待爬虫库中的任一链接,并获取与任一链接对应的页面,提取页面的所有节点,根据所有节点检测页面是否包含新链接,当检测结果为是,获取新链接,添加至待爬虫库,以供后续执行页面检测使用,解决了现有技术中不能够自动获取和/或触发网页里的事件的问题。依据本发明实施例提供的页面检测方法,能够针对待爬虫库中的任一链接,判断该链接对应的页面中是否包含新链接,达到自动抓取基于第二代互联网制作相关内容的网站的链接,完善爬虫操作效果的有益效果。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的页面检测方法的处理流程图;
图2示出了根据本发明一个优选实施例的根据所有节点检测页面是否包含新链接的处理流程图;
图3示出了根据本发明一个优选实施例的根据属性值检测所有动态节点中是否包含新链接的处理流程图;
图4示出了根据本发明一个优选实施例的页面检测方法的处理流程图;
图5示出了根据本发明一个实施例的页面检测客户端的结构示意图;以及
图6示出了根据本发明一个优选实施例的页面检测客户端的结构示意图。
具体实施方式
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
相关技术中提及,若无法全面对页面进行检测,例如基于第一代互联网开发的爬虫引擎无法抓取大部分基于第二代互联网制作相关内容的网站的链接,不能够自动获取和/或触发基于第二代互联网自制相关内容的网站的异步事件和其他事件,将造成对用户的检索操作造成不良影响等后果。
为解决上述技术问题,本发明实施例提供了一种页面检测方法。图1示出了根据本发明一个实施例的页面检测方法的处理流程图。参见图1,本发明实施例的页面检测方法只是包括步骤S102至步骤S116。
步骤S102、在针对网络进行旁路侦听的过程中抓取数据请求包,其中,数据请求包至少包括超文本传输协议请求包;
步骤S104、确定数据请求包对应的链接是否为新链接,其中,新链接为链接库中未保存的链接;
步骤S106、若是,利用对应的链接生成待爬虫库;
步骤S108、提取待爬虫库中的任一链接:
步骤S110、获取与任一链接对应的页面;
步骤S112、提取页面的所有节点;
步骤S114、根据所有节点检测页面是否包含新链接;
步骤S116、当检测结果为是,获取新链接,并添加至待爬虫库,以供后续执行页面检测使用。
依据本发明实施例提供的页面检测方法,能够在针对网络进行旁路侦听的过程中抓取数据请求包,确定数据请求包对应的链接是否为新链接。当确定数据请求包对应的链接为新链接,则利用对应的链接生成待爬虫库。生成待爬虫库之后,提取待爬虫库中的任一链接,并获取与任一链接对应的页面,提取页面的所有节点,根据所有节点检测页面是否包含新链接,当检测结果为是,获取新链接,添加至待爬虫库,以供后续执行页面检测使用,解决了现有技术中不能够自动获取和/或触发网页里的事件的问题。依据本发明实施例提供的页面检测方法,能够针对待爬虫库中的任一链接,判断该链接对应的页面中是否包含新链接,达到自动抓取基于第二代互联网制作相关内容的网站的链接,完善爬虫操作效果的有益效果。
上文提及,本发明实施例中,提取待爬虫库中的任一链接之后,获取任一链接对应的页面。获取到任一链接对应的页面之后,为避免对同一链接执行重复操作,造成时间浪费,操作效率低下的问题,优选地,本发明实施例在待爬虫库中删除已获取到对应网页的链接。
获取到链接对应的页面之后,如图1所示的流程图,本发明实施例提取页面的所有节点,并根据提取到的所有节点检测页面是否包含新链接。图2示出了根据本发明一个优选实施例的根据所有节点检测页面是否包含新链接的处理流程图。参见图2,该流程至少包括步骤S202至步骤S210。
步骤S202、提取节点中的所有动态节点。
具体地,本发明实施例中优选动态节点包括超文本标记语言(HyperText Mark-upLanguage,以下简称HTML)节点。
步骤S204、获取与所有动态节点一一对应的属性值。
步骤S206、根据属性值检测所有动态节点中是否包含新链接。
具体地,本发明实施例按照如图3所示的流程根据属性值检测所有动态节点中是否包含新链接。如图3所示,首先执行步骤S302,根据属性值获取所有动态节点包含的所有事件,并保存至事件库。本发明实施例中,通过如下步骤达到根据属性值获取所有动态节点包含的所有事件这一目的:
提取属性值中的任一属性值;
根据提取的任一属性值判断与其对应的动态节点中是否包含事件,例如通过调用Chrome浏览器的WebCore::EventTarget::hasEventListeners()函数判断与任一属性值对应的动态节点是否包含事件;
若是,则保存事件至事件库,并重复提取操作以及判断操作直至保存所有动态节点包含的所有事件至事件库;
若否,则直接重复提取操作以及判断操作,直至保存所有动态节点包含的所有事件至事件库。
保存所有动态节点包含的所有事件至事件库之后,执行步骤S304,遍历事件库,依次处罚事件库中的任一事件,并判断触发操作是否生成新链接。另外,本发明实施例中,在依次触发事件库中的任一事件时,优选根据事件的类型选择相应的函数来触发事件。例如,若事件的类型为鼠标单击事件,调用由Chrome浏览器的WebKit::WebElement提供的鼠标单击函数来触发鼠标单击事件。若触发操作生成新链接,则所有动态节点中包含新链接,若所有触发操作均未生成新链接,则所有动态节点中均未包含新链接。
步骤S208、根据步骤S206的检测结果,若所有动态节点中包含新链接,则确定页面中包含新链接。
步骤S210、根据步骤S206的检测结果,若所有动态节点中均未包含新链接,则确定页面不包含新链接。
当根据图2所示的流程图检测页面是否包含新链接之后,若包含,本发明实施例获取新链接,并添加至待爬虫库,以供后续执行页面检测使用,若不包含,则提取待爬虫库中的其他链接以继续页面检测操作。
另外,由于谷歌网页浏览器(以下称为Chrome浏览器)为开源浏览器,而IE浏览器(微软公司的一款网页浏览器)并非开源浏览器,则IE浏览器仅能够通过钩子程序(又称hook)的方式进行基于第二代互联网的页面检测操作,而开源的Chrome浏览器则能够通过直接对源代码进行修改实现基于第二代互联网的页面检测操作,具有可控性更强的优点。因此,本发明实施例的页面检测操作优选实施于Chrome浏览器。
实施例一
为将上文各实施例提供的页面检测方法阐述得更加清楚明白,现提供一个优选实施对本发明实施例的页面检测方法进行介绍。需要说明的是,为保证对本优选实施例的阐述更加详尽简洁,本优选实施例中的页面检测方法应用于Chrome浏览器。图4示出了根据本发明一个优选实施例的页面检测方法的处理流程图。参见图4,该流程至少包括步骤S402至步骤S426。
步骤S402、在针对网络进行旁路侦听的过程中抓取数据请求包,其中,数据请求包中至少包括超文本传输协议请求包。
步骤S404、确定数据请求包对应的链接是否为链接库中未保存的链接。若否,流程结束,若是,执行步骤S406。
步骤S406、利用对应的链接生成待爬虫库。
具体地,利用对应的链接生成待爬虫库之后,继续执行步骤S402及步骤S404,并将获取到的新链接加入待爬虫库,已更新待爬虫库。
步骤S408、提取待爬虫库中的任一链接。
具体地,本例中提取的链接为webscan.22X.cn。
步骤S410、获取步骤S408中提取的链接对应的页面,并将该链接从待爬虫库中删除。
步骤S412、提取页面的所有节点。
具体地,当链接对应的页面返回后,通过Chrome浏览器提供的WebNode获取该页面的所有节点。
步骤S414、获取所有节点中的一个节点,若已获取完毕,直接执行步骤S424。
步骤S416、通过Chrome浏览器的WebCore::Node的isHTMLElement判断获取到的节点是否为HTML节点。若是,执行步骤S418,若否,返回执行步骤S414。
步骤S418、获取该节点的链接以及属性值,并当确定节点的链接为新链接时,添加该链接至待爬虫库。
具体地,本例中获取节点的链接,并确定该链接是否为新链接,若非新链接,则仅获取节点的属性值。若为新链接,则除获取与链接对应的节点的属性值之外,添加链接至待爬虫库。本例中获取到的节点的属性值包括节点的属性名称以及属性值例如,当节点为<script type="text/javascript"src="/js/jquery.min.js"></script>,则节点的属性名称为script,并且该节点包括两个属性,一个属性名称为type,值为text/javascript;另外一个属性名称为src,值为/js/jquery.min.js。
步骤S420、判断节点是否包含事件,若是,执行步骤S422,若否,返回执行步骤S414。
具体地,提取步骤S418中获取到的所有属性值中的任一属性值,例如节点名称,节点属性,事件类型,通过Chrome浏览器的WebCore::Node,根据提取的任一属性值判断节点是否包含事件。
步骤S422、获取节点的所有事件,并保存获取到的事件到事件库,并返回执行步骤S414。
步骤S424、所有节点提取完毕之后,遍历事件库,依次触发事件库中的事件。
具体地,本例中根据事件的类型选择相应的函数来触发事件,例如,若事件的类型为鼠标单击事件,调用由Chrome浏览器的WebKit::WebElement提供的鼠标单击函数来触发鼠标单击事件。
步骤S426、判断待爬虫库中是否含有链接,若是,返回执行步骤S408,若否,流程结束。
基于上文各优选实施例提供的页面检测方法,基于同一发明构思,本发明实施例还提供了一种页面检测客户端。图5示出了根据本发明一个实施例的页面检测客户端的结构示意图。参见图5,本发明实施例的页面检测客户端至少包括:生成模块510、提取模块520、获取模块530、检测模块540以及添加模块550。
现介绍本发明实施例的页面检测客户端的各器件或组成的功能以及各部分间的连接关系:
生成模块510,包括抓取单元511、确定单元512以及生成单元513,其中,
抓取单元511,适于在针对网络进行旁路侦听的过程中抓取数据请求包,其中,数据请求包至少包括超文本传输协议请求包;
确定单元512,与抓取单元511相耦合,适于确定数据请求包对应的链接是否为新链接,其中,新链接为链接库中未保存的链接;
生成单元513,与确定单元512相耦合,适于若是,利用对应的链接生成待爬虫库;
提取模块520,与生成模块510相耦合,适于提取待爬虫库中的任一链接;
获取模块530,与提取模块520想耦合,适于获取与任一链接对应的页面;
提取模块520,还适于提取页面的所有节点;
检测模块540,与提取模块520相耦合,适于根据所有节点检测页面是否包含新链接;
添加模块550,与检测模块540相耦合,适于当检测结果为是,获取新链接,并添加至待爬虫库,以供后续执行页面检测使用。
图6示出了根据本发明一个优选实施例的页面检测客户端的结构示意图。参见图6,本发明实施例的页面检测客户端还包括:提取模块520,还适于提取所有节点中的所有动态节点,其中,动态节点包括HTML节点;获取模块530,还适于获取与所有动态节点一一对应的属性值;检测模块540,还适于根据属性值检测所有动态节点中是否包含新链接;确定模块560,与检测模块540相耦合,适于若是,则页面包含新链接;以及,若否,则页面不包含新链接。
在一个优选的实施例中,检测模块540还适于:根据属性值获取所有动态节点包含的所有事件,并保存至事件库;遍历事件库,依次触发事件库中的任一事件;判断触发操作是否生成新链接;若是,则所有动态节点中包含新链接;若否,则所有动态节点中不包含新链接。
在一个优选的实施例中,检测模块540还适于:根据事件的类型选择相应的函数来触发事件。
在一个优选的实施例中,检测模块540还适于:若事件的类型为鼠标单击事件,调用由Chrome浏览器的WebKit::WebElement提供的鼠标单击函数来触发鼠标单击事件。
在一个优选的实施例中,检测模块540还包括:提取单元541,适于提取属性值中任一属性值;判断单元542,适于根据任一属性值判断与其对应的动态节点中是否包含事件;处理单元543,适于若是,保存事件至事件库,并处罚提取单元重复提取操作以及后续操作,直至保存所有动态节点包含的所有事件至事件库;若否,直接处罚提取单元重复提取操作以及后续操作,直至保存所有动态节点包含的所有事件至事件库。
在一个优选的实施例中,判断单元542还适于:通过调用Chrome浏览器的WebCore::EventTarget::hasEventListeners()函数判断与任一属性值对应的动态节点是否包含事件。
在一个优选的实施例中,本发明实施例的页面检测客户端还包括:获取模块530,还适于获取与所有动态节点一一对应的链接;检测模块540,还适于判断对应的链接是否为新链接;添加模块550,还适于若是,添加新链接至待爬虫库,以供后续执行页面检测使用。
在一个优选的实施例中,本发明实施例的页面检测客户端还包括:删除模块570,适于获取模块获取与任一链接对应的页面之后,在待爬虫库中删除任一链接。
根据上述任意一个优选实施例或多个优选实施例的组合,本发明实施例能够达到如下有益效果:
依据本发明实施例提供的页面检测方法,能够在针对网络进行旁路侦听的过程中抓取数据请求包,确定数据请求包对应的链接是否为新链接。当确定数据请求包对应的链接为新链接,则利用对应的链接生成待爬虫库。生成待爬虫库之后,提取待爬虫库中的任一链接,并获取与任一链接对应的页面,提取页面的所有节点,根据所有节点检测页面是否包含新链接,当检测结果为是,获取新链接,添加至待爬虫库,以供后续执行页面检测使用,解决了现有技术中不能够自动获取和/或触发网页里的事件的问题。依据本发明实施例提供的页面检测方法,能够针对待爬虫库中的任一链接,判断该链接对应的页面中是否包含新链接,达到自动抓取基于第二代互联网制作相关内容的网站的链接,完善爬虫操作效果的有益效果。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的装置或者设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。