具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能理解为对本申请的限制。
在本申请的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本申请的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请中的具体含义。
为了提高网页信息获取的准确性和成功率,本申请提出一种网页信息的获取方法和装置。
下面参考附图描述根据本申请实施例的网页信息的获取方法和装置。
图1为根据本申请一个实施例的网页信息的获取方法的流程图。
如图1所示,根据本申请实施例的网页信息的获取方法,包括:
S101,获得待解析网页。
其中,待解析网页可以是HTML(HypertextMarkupLanguage,超文本标记语言)页面。
S102,从待解析网页中提取出待解析关键字,获得待解析关键字在待解析网页中的位置,并根据位置间的关系从待解析网页中获取待解析关键字对应的内容。
在本申请的实施例中,如图2所示,步骤S102具体包括:
S201,将待解析网页转换成节点树。
具体地,可根据待解析网页中的HTML标签生成节点树,本申请对生成节点树的方式不限。在本申请的一个实施例中,为了节省将将待解析网页转换成节点树时所占用的内存,可通过VTD(VirtualTokenDescriptor,虚拟令牌描述符)的方式将待解析网页转换成节点树。节点树中的每个节点对应待解析网页中的一个HTML标签。
S202,使用预设的解析模板生成解析树,其中,解析树中至少包含一个组节点和以组节点为父节点的多个数据节点,且每个节点中均包含表示路径信息的字段,每个数据节点中均包含表示待解析关键字的字段名。
其中,解析模板生成方式为:根据来自各个网页的不同提供方提供的网页对待解析关键字在网页中的位置、路径关系分别进行统计分析,并根据分析结果得到不同提供方提供的网页中成组出现的多个待解析关键字及其对应的父节点对应的待解析关键字等,然后根据得到的待解析关键字之间的关系生成不同提供方对应的解析模板。
另外,由于网页的提供方会根据自身需要对网页内容及其位置关系进行更新,因此,解析模板可根据网页的提供方以及网页对应的更新时间或版本分别建立。例如,对于提供方A可有A1、A2、A3三个不同版本的解析模板。
根据网页中待解析关键字之间的关系将解析模板定义为树形结构,因此,可根据解析模板生成用于解析网页的解析树。其中,解析树的根节点为一个集合节点,即节点的集合,可包含至少一个组节点,其中,组节点为多个数据节点的父节点,还可是多个数据节点的集合。
其中,数据节点包含了待解析关键字的字段名和表示路径信息的字段,每个数据节点可映射到唯一的待解析字段。例如,以账单页面为例,每个数据节点可映射到账单金额、账单日等待解析字段。
其中,表示路径信息的字段为一个xpath表达式,用于查找包括该数据节点的待解析关键字的字段名的多个路径,即根据该xpath表达式可查找包含待解析关键字的节点,并得到节点的路径信息。路径信息可为该数据节点相对于其父节点的相对路径,可通过这个相对路径获取数据节点中待解析关键字的字段名对应的内容。
在本申请的一个实施例中,解析模板中还可包括用于表示待解析网页中的列表的内容,由此,在本申请的一个实施例中,集合节点还可不通过组节点而直接包含数据节点,或者也可包含列表节点等。具体地,可根据解析模板中此部分内容可生成解析树中的列表节点。解析树中可包含至少一个列表节点和组成列表节点的至少一个集合节点的父节点的路径信息,其中,每个集合节点包括多个数据节点。
S203,使用解析树对节点树进行解析,并根据数据节点中包含的字段名和路径信息解析出待解析关键字对应的内容。
在本申请的一个实施例中,可根据解析树中各个节点所包括的数据节点之间的关系对节点树进行遍历完成对节点树的解析。
具体地,对于解析树中的组节点,可分别根据数据节点中包含的路径信息确定构成每个组节点的数据节点,从而对于每个组节点来说,可进一步获取构成该组节点的每个数据节点所包含的待解析关键字的字段名G1、G2、G3、G4,可用其中任意一个字段名对节点树进行遍历。以G1为例,用G1对节点树进行遍历,以找到节点树中全部包含G1的节点,然后根据这些节点的绝对路径(相对于节点树的根节点的路径)确定这些节点的父节点,并判断每个包含G1的节点的父节点的其他子节点中是否还分别包括G2、G3和G4,如果是,则分别包括G1、G2、G3、G4且具有相同父节点的节点对应的内容为待解析关键字对应的内容。
根据xpath表达式可查找到一个或多个包含待解析关键字的子节点,因此,在本申请的一个实施例中,解析树中的节点(组节点、数据节点、集合节点等)中包含表示路径信息的字段可对应多个路径信息,该方法还包括:
当根据表示路径信息的字段对应的多个路径信息中的一个路径信息解析失败时,依次解析表示路径信息的字段对应的其他路径信息进行解析,直至解析成功;
或者,在根据最后一个表示路径信息的字段对应的路径信息解析失败时,提示包含多个字段的节点解析失败。
从而,在解析时,可从第一个路径信息对应的第一个子节点开始解析,如果第一个子节点解析失败,则解析第二个路径信息对应的第二个子节点,直至解析成功,或者该表示路径信息的字段所对应的多个路径信息都解析失败,则进行提示。
在本申请的一个实施例中,解析树的数据节点中还包含有预设字段,如果一个数据节点的预设字段为第一字段值,则当该数据节点解析失败时,提示数据节点的父节点解析失败。该预设字段用于表示该数据节点是否必须。
在本申请的一个实施例中,对于每个子节点进行解析得到相应的解析结果后,需要进一步对解析结果进行过滤。具体地,可对每个数据节点的表示路径信息的字段对应的路径信息所指向的子节点进行过滤,如果过滤后为空或null就认为解析失败,如果还有其他对应的子节点就继续用后面的子节点重复上述过程。如果所有对应的子节点都解析失败了,且该数据节点中预设字段为第一字段值时(即该数据节点为必须),就表示该数据节点解析失败了。
在本申请的一个实施例中,为了减少待解析网页生成的节点树的大小,在将待解析网页转换成节点树之前,还可包括:对待解析网页进行整理,以清除待解析网页中的非解析内容,其中,非解析内容包括未闭合标签、注释、JavaScript脚本中的一种或多种。从而在不影响待解析网页中的待解析内容的前提下,减小了待解析网页生成的节点树的大小,提高了解析性能。
在本申请的一个实施例中,如果由所使用的解析模板生成的解析树在解析待解析网页时解析失败,则表明待解析网页的布局可能发生更新。因此,可在解析失败时,进行提示,以便于对解析模板进行对应更新,从而能够及时的更新解析模板以供后续使用。能够及时发现报错、更改,而不是勉强的解析出错误的内容,提高了网页信息获取的准确性。由此,在网页的布局结构发生变化时,能够在解析失败时及时提示,而不会给出错误的信息,提高了获取网页信息的准确性,从而能够为用户提供更精准的网页信息。
本申请实施例的网页信息的获取方法,通过在待解析网页中提取待解析关键字,并获得待解析关键字在待解析网页中的位置,根据待解析关键字的位置间的关系从待解析网页中获取待解析关键字对应的内容,从而,根据待解析关键字的位置间的关系将待解析关键字绑定,能够避免待解析网页中非主要内容中所包括待解析关键字的干扰导致的解析失败,增强了网页信息获取的抗干扰性,从而既提高了网页信息获取的成功率,也提高了网页信息获取的准确率。此外,根据各个待解析关键字的位置间的关系,能够极大程度上从网页中滤除无用信息,并精准地提取出用户所需要的信息,提升了用户体验。
随着互联网技术的发展,越来越多的用户可通过互联网金融管理平台在线管理账单。这就需要从包含用户的账单信息的网页中获取账单信息,并通过互联网金融管理平台提供给用户。由于账单信息出错会给用户带来极大的不便甚至是经济损失及信用问题,因此获取账单信息的准确率的要求比较高。其中,互联网金融管理平台是指以依托于支付、云计算、社交网络以及搜索引擎等互联网工具,实现资金融通、支付和信息中介等业务的一种新兴金融管理平台,可包括网上银行、第三方支付平台、网络借贷平台、网络投资平台等。
但由于网上银行、缴费管理网站或者用户个人邮箱中的账单页中用户需要的账单信息的位置因提供方不同而位置不同,并且,账单信息除了包括用户需要的账单信息之外,还包括一些推荐信息以及宣传信息,这些信息中也包括账单信息中的关键字,为了避免因账单信息因位置变化或者账单页中其他信息(推荐信息或宣传信息等)的干扰而造成账单信息获取不准确,可将账单页作为待解析网页,并通过本申请提出的网页信息的获取方法从账单页中获取账单信息。其中,待解析关键字包括账户信息类关键字、交易信息类关键字、积分信息类关键字、还款信息类关键字中的一种或多种。
具体地,如图3所示,为根据本申请一个实施例的账单信息的获取方法的流程图。
如图3所示,根据本申请实施例的账单信息的获取方法,包括:
S301,获得待解析的账单文档。
在本申请的实施例中,每个账单页对应的HTML文档可以看作一个账单文档。账单文档可以是银行卡(如储蓄卡、信用卡等)账单、通信费或水电费等的缴费单等。账单文档可从网上银行、缴费管理网站或者用户个人邮箱中相关结构发送的邮件中获取。
在本申请的一个实施例中,账单文档可以是HTML文档。
具体地,互联网金融管理平台可为用户提供登陆信息管理功能,用户在需要时在互联网管理平台中直接输入对应的登陆信息,或者预先在互联网金融管理平台中输入并存储个人的各类账单文档的来源的登陆信息,并在需要时选择对应的账单文档的来源,以便互联网金融平台可根据该登陆信息登陆对应的账单文档的来源方,并从从中获得带解析的账单文档。
当然,互联网金融管理平台可按照预设周期根据用户已输入的登陆信息登陆相应的账单文档的来源,并定期获取账单文档,从而可及时的将最新账单信息提供给用户。
以第三方支付平台支付宝为例,用户可在支付宝中预先存储其邮箱的登陆信息,从而支付宝可定期从用户的邮箱中获取账单文档,即由银行发送的具有账单信息的邮件。
S302,从账单文档中提取出待解析关键字,获得待解析关键字在账单文档中的位置,并根据位置间的关系从账单文件中获取待解析关键字对应的内容。
在本申请的实施例中,如图4所示,步骤S302具体包括:
S401,将账单文档转换成节点树。
具体地,可根据账单文档中的HTML标签生成节点树,本申请对生成节点树的方式不限。在本申请的一个实施例中,为了节省将账单文档转换成节点树时所占用的内存,可通过VTD的方式将账单文档转换成节点树。
S402,使用预设的解析模板生成解析树,其中,解析树中至少包含一个组节点和以组节点为父节点的多个数据节点,且每个节点中均包含表示路径信息的字段,每个数据节点中均包含表示待解析关键字的字段名。
其中,解析模板生成方式为:分别根据来自账单文档的不同提供方提供的账单文档对待解析关键字在账单文档中的位置、路径关系分别进行统计分析,并根据分析结果得到不同提供方提供的账单文档中成组出现的多个待解析关键字及其对应的父节点对应的待解析关键字等,然后根据得到的待解析关键字之间的关系生成不同提供方对应的解析模板。
另外,由于账单文档的提供方会根据自身需要对账单文档内容及其位置关系进行更新,因此,解析模板可根据账单文档的提供方以及账单文档对应的更新时间或版本分别建立。例如,对于提供方A可有A1、A2、A3三个不同版本的解析模板。
根据账单文档中待解析关键字之间的关系将解析模板定义为树形结构,因此,可根据解析模板生成用于解析账单文档的解析树。其中,解析树的根节点为一个集合节点,即节点的集合,可包含至少一个组节点,其中,组节点为多个数据节点的父节点,还可是多个数据节点的集合。
其中,数据节点包含了待解析关键字的字段名和表示路径信息的字段,每个数据节点可映射到唯一的待解析字段,如账单金额、账单日等。
其中,表示路径信息的字段为一个xpath表达式,用于查找包括该数据节点的待解析关键字的字段名的多个路径,即根据该xpath表达式可查找包含待解析关键字的节点,并得到节点的路径信息。路径信息可为该数据节点相对于其父节点的相对路径,可通过这个相对路径获取数据节点中待解析关键字的字段名对应的内容。
举例来说,以下为解析模板中部分组节点进行定义的示例:其中,类型“type”为“group”的节点"nameGroup"(用户名)对应解析树中的组节点,"name"(持卡人姓名)和"billDate"(账单周期)为解析树中以"nameGroup"为父节点的两个数据节点。其中,".//*[id='mailContentContainer']/span","//*[contains(text(),'尊敬的')]/../../td/span","//*[contains(text(),'尊敬的')]/..",为组节点"nameGroup"中包括的xpath表达式。
图5a为根据本申请一个实施例的账单文档中部分内容的示意图。根据上述示例生成的解析树中的组节点及其所包括的数据节点对应图5a所示账单文档中的区域A的内容。当然,对于图5a所示的账单文档来说,在该解析模板对应的解析树中,组节点"nameGroup"的子节点还可包括表示“最晚还款日”的数据节点(在以下示例中未示出);另外,该解析模板对应的解析树中还可包括表示“账户信息”的组节点,该组节点的子节点包括表示“账单周期”、“最低还款额”、“信用额度”等的数据节点。其中,上述解析模板对应的解析树中,数据节点"billDate"的待解析关键字的字段名为"next-date",表示路径信息的字段为包含"next-date('以下是您')"的路径。
在本申请的一个实施例中,解析模板中还可包括用于表示账单文档中的列表的内容,由此,在本申请的一个实施例中,集合节点还可不通过组节点而直接包含数据节点,或者也可包含列表节点等。具体地,可根据解析模板中此部分内容可生成解析树中的列表节点。解析树中可包含至少一个列表节点和组成列表节点的至少一个集合节点的父节点的路径信息,其中,每个集合节点包括多个数据节点。图5b为本申请另一个实施例的账单文档中部分内容的示意图,以图5b中的账单文档中的内容为例,列表节点可用于分别表示账单文档中的“应还款明细”、“交易明细”、“积分明细”等列表,每个列表中有不定长的行。以“交易明细”列表为例,该列表中每一行对应列表节点中的一个集合节点,该集合节点中包括表示“交易日”、“银行记账日”、“卡号后四位”、“交易描述”、“交易金额”以及“结算金额”等的数据节点。
S403,使用解析树对节点树进行解析,并根据数据节点中包含的字段名和路径信息解析出待解析关键字对应的内容。
在本申请的一个实施例中,可根据解析树中各个节点所包括的数据节点之间的关系对节点树进行遍历完成对节点树的解析。
具体地,对于解析树中的组节点,可分别根据数据节点中包含的路径信息确定构成每个组节点的数据节点,从而对于每个组节点来说,可进一步获取构成该组节点的每个数据节点所包含的待解析关键字的字段名G1、G2、G3、G4,可用其中任意一个字段名对节点树进行遍历。以G1为例,用G1对节点树进行遍历,以找到节点树中全部包含G1的节点,然后根据这些节点的绝对路径(相对于节点树的根节点的路径)确定这些节点的父节点,并判断每个包含G1的节点的父节点的其他子节点中是否还分别包括G2、G3和G4,如果是,则分别包括G1、G2、G3、G4且具有相同父节点的节点对应的内容为待解析关键字对应的内容。
举例来说,如果G1、G2、G3、G4分别是图5a中的“账户币种”、“本期全部应还款额”、“最低还款额”、“争议款/笔数”,则如果在节点树中存在一个节点G,其子节点分别包括待解析关键字“账户币种”、“本期全部应还款额”、“最低还款额”、“争议款/笔数”,则可根据节点树获取节点G的子节点中与待解析关键字分别对应的内容。例如,根据图5a中区域B所对应的节点,其子节点分别包括待解析关键字“账户币种”、“本期全部应还款额”、“最低还款额”、“争议款/笔数”,则可分别获取上述待解析关键字对应的内容“人民币”、“12,290.00”、“1,229.00”、“-”。
根据xpath表达式可查找到一个或多个包含待解析关键字的子节点,因此,在本申请的一个实施例中,解析树中的节点(组节点、数据节点、集合节点等)中包含表示路径信息的字段可对应多个路径信息,该方法还包括:
当根据表示路径信息的字段对应的多个路径信息中的一个路径信息解析失败时,依次解析表示路径信息的字段对应的其他路径信息进行解析,直至解析成功;
或者,在根据最后一个表示路径信息的字段对应的路径信息解析失败时,提示包含多个字段的节点解析失败。
从而,在解析时,可从第一个路径信息对应的第一个子节点开始解析,如果第一个子节点解析失败,则解析第二个路径信息对应的第二个子节点,直至解析成功,或者该表示路径信息的字段所对应的多个路径信息都解析失败,则进行提示。
在本申请的一个实施例中,解析树的数据节点中还包含有预设字段,如果预设字段为第一字段值,则当数据节点解析失败时,提示数据节点的父节点解析失败。该预设字段用于表示该数据节点是否必须。例如,在前述解析模板示例中,"nameGroup"对应的组节点所包含的预设字段为"required",预设字段"required"为第一字段值true时,表示该组节点为必须的,预设字段"required"为第一字段值false时,表示该组节点为非必须的。对于必须的数据节点,如果解析失败,则会导致其父节点解析失败,由此,对于出错容忍度低的账单信息来说,能够避免因解析失败导致得到错误的账单信息,避免了因解析错误导致用户还款出错、漏还的情况,从而避免出现资损或信用问题。
具体地,在本申请的一个实施例中,对于每个子节点进行解析得到相应的解析结果后,需要进一步对解析结果进行过滤。具体地,以上述解析模板为例,对于数据节点“name”,可通过“filter”语句对其表示路径信息的字段对应的路径信息所指向的子节点进行过滤,如果过滤后为空或null就认为解析失败,如果还有其他对应的子节点就继续用后面的子节点重复上述过程。如果所有对应的子节点都解析失败了,同时如果数据节点“name”中预设字段"required"为第一字段值true时(即该数据节点为必须),就表示数据节点“name”解析失败了。
在本申请的一个实施例中,为了减少账单文档生成的节点树的大小,在将账单文档转换成节点树之前,还可包括:对账单文档进行整理,以清除账单文档中的非解析内容,其中,非解析内容包括未闭合标签、注释、JavaScript脚本中的一种或多种。从而在不影响账单文档中的待解析内容的前提下,减小了账单文档生成的节点树的大小,提高了解析性能。
在本申请的一个实施例中,如果由所使用的解析模板生成的解析树在解析账单文档时解析失败,则表明账单文档的布局可能发生更新。因此,可在解析失败时,进行提示,以便于对解析模板进行对应更新,从而能够及时的更新解析模板以供后续使用。能够及时发现报错、更改,而不是勉强的解析出错误的内容,保证账单信息获取的准确性。
本申请实施例的账单信息的获取方法,通过在待解析的账单文档中提取待解析关键字,并得待解析关键字在账单文档中的位置,根据待解析关键字的为之间的关系从账单文档中获取待解析关键字对应的内容,从而,根据待解析关键字的位置间的关系将待解析关键字绑定,能够避免账单文档中非账单信息内容中出现待解析关键字对解析的干扰,增强了账单信息获取的抗干扰性。此外,在账单文档的布局结构发生变化时,能够及时提示,而不会给出错误的信息,提高了账单信息获取的准确性。
为了实现上述实施例,本申请还提出一种网页信息的获取装置。
图6为根据本申请一个实施例的网页信息的获取装置的结构示意图。
如图6所示,根据本申请实施例的网页信息的获取装置,包括:获得模块10和解析模块20。
具体地,获得模块10用于获得待解析网页。
其中,待解析网页可以是HTML页面。
为了能够准确获取账单页中的账单信息,本申请的一个实施例中的待解析网页可以是账单页。在本申请的实施例中,每个账单页对应的HTML文档可以看作一个账单文档。账单文档可以是银行卡(如储蓄卡、信用卡等)账单、通信费或水电费等的缴费单等。账单文档可从网上银行、缴费管理网站或者用户个人邮箱中相关结构发送的邮件中获取。
具体地,互联网金融管理平台可为用户提供登陆信息管理功能,用户在需要时在互联网管理平台中直接输入对应的登陆信息,或者预先在互联网金融管理平台中输入并存储个人的各类账单文档的来源的登陆信息,并在需要时选择对应的账单文档的来源,以便互联网金融平台可根据该登陆信息登陆对应的账单文档的来源方,并从从中获得带解析的账单文档。
当然,互联网金融管理平台可按照预设周期根据用户已输入的登陆信息登陆相应的账单文档的来源,并定期获取账单文档,从而可及时的将最新账单信息提供给用户。
以第三方支付平台支付宝为例,用户可在支付宝中预先存储其邮箱的登陆信息,从而支付宝可定期从用户的邮箱中获取账单文档,即由银行发送的具有账单信息的邮件。
解析模块20用于从待解析网页中提取出待解析关键字,获得待解析关键字在待解析网页中的位置,并根据位置间的关系从待解析网页中获取待解析关键字对应的内容。
在本申请的实施例中,更具体地,如图7所示,解析模块20可具体包括:转换单元21,生成单元22和解析单元23,其中,
转换单元21用于将待解析网页转换成节点树;转换单元21可根据待解析网页中的HTML标签生成节点树,本申请对生成节点树的方式不限。在本申请的一个实施例中,为了节省将将待解析网页转换成节点树时所占用的内存,转换单元21可通过VTD的方式将待解析网页转换成节点树。节点树中的每个节点对应待解析网页中的一个HTML标签。
生成单元22用于使用预设的解析模板生成解析树,其中,解析树中至少包含一个组节点和以组节点为父节点的多个数据节点,且每个节点中均包含表示路径信息的字段,每个数据节点中均包含表示待解析关键字的字段名;
其中,解析模板生成方式为:根据来自各个网页的不同提供方提供的网页对待解析关键字在网页中的位置、路径关系分别进行统计分析,并根据分析结果得到不同提供方提供的网页中成组出现的多个待解析关键字及其对应的父节点对应的待解析关键字等,然后根据得到的待解析关键字之间的关系生成不同提供方对应的解析模板。
另外,由于网页的提供方会根据自身需要对网页内容及其位置关系进行更新,因此,解析模板可根据网页的提供方以及网页对应的更新时间或版本分别建立。例如,对于提供方A可有A1、A2、A3三个不同版本的解析模板。
根据网页中待解析关键字之间的关系将解析模板定义为树形结构,因此,可根据解析模板生成用于解析网页的解析树。其中,解析树的根节点为一个集合节点,即节点的集合,可包含至少一个组节点,其中,组节点为多个数据节点的父节点,还可是多个数据节点的集合。
其中,数据节点包含了待解析关键字的字段名和表示路径信息的字段,每个数据节点可映射到唯一的待解析字段。例如,以账单页面为例,每个数据节点可映射到账单金额、账单日等待解析字段。
其中,表示路径信息的字段为一个xpath表达式,用于查找包括该数据节点的待解析关键字的字段名的多个路径,即根据该xpath表达式可查找包含待解析关键字的节点,并得到节点的路径信息。路径信息可为该数据节点相对于其父节点的相对路径,可通过这个相对路径获取数据节点中待解析关键字的字段名对应的内容。
举例来说,以账单文档为例,以下为解析模板中部分组节点进行定义的示例:其中,类型“type”为“group”的节点"nameGroup"(用户名)对应解析树中的组节点,"name"(持卡人姓名)和"billDate"(账单周期)为解析树中以"nameGroup"为父节点的两个数据节点。其中,".//*[id='mailContentContainer']/span","//*[contains(text(),'尊敬的')]/../../td/span","//*[contains(text(),'尊敬的')]/..",为组节点"nameGroup"中包括的xpath表达式。
图5a为根据本申请一个实施例的账单文档中部分内容的示意图。根据上述示例生成的解析树中的组节点及其所包括的数据节点对应图3a所示账单文档中的区域A的内容。当然,对于图5a所示的账单文档来说,在该解析模板对应的解析树中,组节点"nameGroup"的子节点还可包括表示“最晚还款日”的数据节点(在以下示例中未示出);另外,该解析模板对应的解析树中还可包括表示“账户信息”的组节点,该组节点的子节点包括表示“账单周期”、“最低还款额”、“信用额度”等的数据节点。其中,上述解析模板对应的解析树中,数据节点"billDate"的待解析关键字的字段名为"next-date",表示路径信息的字段为包含"next-date('以下是您')"的路径。
在本申请的一个实施例中,解析模板中还可包括用于表示待解析网页中的列表的内容,由此,在本申请的一个实施例中,集合节点还可不通过组节点而直接包含数据节点,或者也可包含列表节点等。具体地,生成单元22可根据解析模板中此部分内容可生成解析树中的列表节点。解析树中可包含至少一个列表节点和组成列表节点的至少一个集合节点的父节点的路径信息,其中,每个集合节点包括多个数据节点。以账单文档为例,图5b为本申请另一个实施例的账单文档中部分内容的示意图,以图5b中的账单文档中的内容为例,列表节点可用于分别表示账单文档中的“应还款明细”、“交易明细”、“积分明细”等列表,每个列表中有不定长的行。以“交易明细”列表为例,该列表中每一行对应列表节点中的一个集合节点,该集合节点中包括表示“交易日”、“银行记账日”、“卡号后四位”、“交易描述”、“交易金额”以及“结算金额”等的数据节点。
解析单元23用于使用解析树对节点树进行解析,并根据数据节点中包含的字段名和路径信息解析出待解析关键字对应的内容。
在本申请的一个实施例中,可根据解析树中各个节点所包括的数据节点之间的关系对节点树进行遍历完成对节点树的解析。
具体地,对于解析树中的组节点,可分别根据数据节点中包含的路径信息确定构成每个组节点的数据节点,从而对于每个组节点来说,可进一步获取构成该组节点的每个数据节点所包含的待解析关键字的字段名G1、G2、G3、G4,可用其中任意一个字段名对节点树进行遍历。以G1为例,用G1对节点树进行遍历,以找到节点树中全部包含G1的节点,然后根据这些节点的绝对路径(相对于节点树的根节点的路径)确定这些节点的父节点,并判断每个包含G1的节点的父节点的其他子节点中是否还分别包括G2、G3和G4,如果是,则分别包括G1、G2、G3、G4且具有相同父节点的节点对应的内容为待解析关键字对应的内容。
举例来说,以账单文档为例,如果G1、G2、G3、G4分别是图5a中的“账户币种”、“本期全部应还款额”、“最低还款额”、“争议款/笔数”,则如果在节点树中存在一个节点G,其子节点分别包括待解析关键字“账户币种”、“本期全部应还款额”、“最低还款额”、“争议款/笔数”,则可根据节点树获取节点G的子节点中与待解析关键字分别对应的内容。例如,根据图5a中区域B所对应的节点,其子节点分别包括待解析关键字“账户币种”、“本期全部应还款额”、“最低还款额”、“争议款/笔数”,则可分别获取上述待解析关键字对应的内容“人民币”、“12,290.00”、“1,229.00”、“-”。
根据xpath表达式可查找到一个或多个包含待解析关键字的子节点,因此,在本申请的一个实施例中,解析树中的节点中包含表示路径信息的字段对应多个路径信息,解析模块20还用于:
当根据表示路径信息的字段对应的多个路径信息中的一个路径信息解析失败时,依次解析表示路径信息的字段对应的其他路径信息进行解析,直至解析成功;
或者,在根据最后一个表示路径信息的字段对应的路径信息解析失败时,提示包含多个字段的节点解析失败。
从而,在解析时,解析模块20可从第一个路径信息对应的第一个子节点开始解析,如果第一个子节点解析失败,则解析第二个路径信息对应的第二个子节点,直至解析成功,或者该表示路径信息的字段所对应的多个路径信息都解析失败,则进行提示。
在本申请的一个实施例中,解析树的数据节点中还包含有预设字段,解析模块20还用于:如果预设字段为第一字段值,则当数据节点解析失败时,提示数据节点的父节点解析失败。该预设字段用于表示该数据节点是否必须。例如,在前述解析模板示例中,"nameGroup"对应的组节点所包含的预设字段为"required",预设字段"required"为第一字段值true时,表示该组节点为必须的,预设字段"required"为第一字段值false时,表示该组节点为非必须的。对于必须的数据节点,如果解析失败,则会导致其父节点解析失败,由此,对于出错容忍度低的账单信息来说,能够避免因解析失败导致得到错误的账单信息,避免了因解析错误导致用户还款出错、漏还的情况,从而避免出现资损或信用问题。
在本申请的一个实施例中,对于每个子节点进行解析得到相应的解析结果后,需要进一步对解析结果进行过滤。具体地,可对每个数据节点的表示路径信息的字段对应的路径信息所指向的子节点进行过滤,如果过滤后为空或null就认为解析失败,如果还有其他对应的子节点就继续用后面的子节点重复上述过程。如果所有对应的子节点都解析失败了,且该数据节点中预设字段为第一字段值时(即该数据节点为必须),就表示该数据节点解析失败了。
以上述账单文档的解析模板为例,对于数据节点“name”,可通过“filter”语句对其表示路径信息的字段对应的路径信息所指向的子节点进行过滤,如果过滤后为空或null就认为解析失败,如果还有其他对应的子节点就继续用后面的子节点重复上述过程。如果所有对应的子节点都解析失败了,同时如果数据节点“name”中预设字段"required"为第一字段值true时(即该数据节点为必须),就表示数据节点“name”解析失败了。
在本申请的一个实施例中,如果由所使用的解析模板生成的解析树在解析待解析网页时解析失败,则表明待解析网页的布局可能发生更新。因此,可在解析失败时,进行提示,以便于对解析模板进行对应更新,从而能够及时的更新解析模板以供后续使用。能够及时发现报错、更改,而不是勉强的解析出错误的内容,提高了网页信息获取的准确性。由此,在网页的布局结构发生变化时,能够在解析失败时及时提示,而不会给出错误的信息,提高了获取网页信息的准确性,从而能够为用户提供更精准的网页信息。
本申请实施例的网页信息的获取装置,通过在待解析网页中提取待解析关键字,并获得待解析关键字在待解析网页中的位置,根据待解析关键字的位置间的关系从待解析网页中获取待解析关键字对应的内容,从而,根据待解析关键字的位置间的关系将待解析关键字绑定,能够避免待解析网页中非主要内容中所包括待解析关键字的干扰导致的解析失败,增强了网页信息获取的抗干扰性,从而既提高了网页信息获取的成功率,也提高了网页信息获取的准确率。此外,根据各个待解析关键字的位置间的关系,能够极大程度上从网页中滤除无用信息,并精准地提取出用户所需要的信息,提升了用户体验。
图8为根据本申请另一个实施例的网页信息的获取装置的结构示意图。
如图8所示,该网页信息的获取装置,包括:获得模块10、解析模块20和整理模块30。
具体地,整理模块,用于在将待解析网页转换成节点树之前,对待解析网页进行整理,以清除待解析网页中的非解析内容,其中,非解析内容包括未闭合标签、注释、JavaScript脚本中的一种或多种。
由此,能够在不影响待解析网页中的待解析内容的前提下,减小了待解析网页生成的节点树的大小,提高了解析性能。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得程序,然后将其存储在计算机存储器中。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本申请的实施例,本领域的普通技术人员可以理解:在不脱离本申请的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本申请的范围由权利要求及其等同限定。