一种网页模板的提取方法和装置的制造方法

文档序号:8319293阅读:226来源:国知局
一种网页模板的提取方法和装置的制造方法
【技术领域】
[0001]本发明涉及网络技术领域,特别涉及一种网页模板的提取方法和装置。
【背景技术】
[0002]在大数据生态链中,互联网数据的采集和解析,处于生态链的前端,是数据挖掘分析的前提。互联网的网页,其模板千差万别,即使是同一网站,也可能同时存在不同的模板,而不同的时期,模板也会相应改变,以减少因乏味、审美疲劳造成的客户流失。其中,网页模板一般是指网页的结构化,比如,一个网页展示的文字和图像结构,图片的插入位置等。
[0003]而目前的网页解析技术,大多还是针对不同网页模板进行不同的解析程序编写。因此,要保证解析程序的编写,提高网页解析质量的关键,以便更好地完成网页解析,则要求能够从大量的网页中提取出网页模板。

【发明内容】

[0004]本发明提供一种提取网页模板的方法和装置,能够解决现有技术中无法提取网页模板的问题。
[0005]一种网页模板的提取方法,包括:
[0006]利用各个网页,分别构建各个DOM树;
[0007]将各个DOM树中的节点名称按广度遍历加入各个队列,生成各个DOM树节点队列;
[0008]对所有DOM树节点队列,按队列顺序取出节点名称进行比较,相同的加入DOM分类树节点中,不同的建立树分叉然后加入,得到对应各分类网页的DOM树网页模板。
[0009]所述利用各个网页,分别构建各个DOM树包括:
[0010]使用Jsoup将每一个网页的网页源码构建为一个DOM树,生成Document对象实例;使用Jsoup的select O方法找到注释类元素并删除。
[0011 ] 所述生成各个DOM树节点队列包括:
[0012]对每一个DOM树屯,d2,...,dn进行广度遍历,按遍历顺序使用tagName O取出元素标签名称,将树节点的节点名称加入队列中,得到η个队列Q = {qp q2,..., qn},其中Qi={tnn,tni2,...,tnix},(I彡i彡η),?η^.(1彡j彡χ)表示第i个队列中的第j个元素的标签名称,其中得到Qi的过程包括:
[0013]c)创建两个队列qe,%,将根节点加入这两个队列中,队列作为进行广度遍历的暂存队列,Qi保存广度遍历结果;
[0014]d)从1队列头出队列一个元素,使用childrenO获得所有子元素,加入到q e和qi的队尾;
[0015]重复b)步,直到qe队列为空为止,得到一个DOM树遍历队列qi。
[0016]所述得到对应各分类网页的网页模板DOM树包括:
[0017]设类别树节点的结构为node = {child,tagname,brother,listqid},其中,child记录该节点的第一个子节点,tagname保存当前节点元素的标签名称,brother保存当前节点的相邻兄弟节点,I i st i d保存与从根节点到当前节点所构成树节点序列一致的所有qi的下标,也就是i值的列表,包括:
[0018]c)从 Q = Iq1, q2,...,qn}中,取出{tnn,tn21,...,tnnl},以 tnn为初始值,新建 noden,表示类别树第一层的第一个节点,tnn— node n.tagname,I — noden.listqid,将tn21ig tn n比较,如果tn 21= tn n,则将2加入noden.listqid列表;如果不同,新建node12,作为类别树第一层的第二个节点,tn21— node 12.tagname, 2 — node12.listqid,node12— node n.brother,依次将tnn (2彡i彡n)与类别树第一层的所有节点noden、node12、...、nodelD^ tagname进行比较,相同的则将i值加入当前节点的listqid列表中,不同的则新建I1de1 (m+1),做类似上述node2的操作,将I1de1 (m+1)赋予node lm.brother,并将i值加入I1de1 (m+1).listqid,创建出类别树的第I层;
[0019]d)假设类别树的第k层已经扩展完毕,开始扩展类别树的k+Ι层,从第k层的第一个节点nodekl开始构建子树,取出node kl.listqid列表的第一个值i (从原列表中删除)所代表的Qi的第k+Ι个值tn i(k+1),新建node(k+1)1,赋予nodekl.child。并依次取出nodekl.listqid的队列id(从原列表中删除),将其代表的队列的第k+Ι个元素标签名称与tni(k+1)比较,依照a)中所述类别树扩展方式产生该子树。然后通过nodekl.brother取得nodek2,扩展第二个子树,依次类推,直至第k层所有节点的子树全部生成,
[0020]重复步骤b),将Q中所有队列的所有元素全部比较完成,得到一个完整的网页模板DOM树。
[0021]所述k值是根据需求的模板粒度设定;
[0022]和/ 或,
[0023]该方法进一步包括:网页模板DOM树的叶子节点中保存每个类别的网页标识;对每一个网页模板DOM树,通过从根节点开始,沿不同分支找到各自子节点,逐层深入直到预设的第k层子节点结束而得到每一个网页模板;
[0024]和/ 或,
[0025]在网页模板DOM树的最后一个节点与它所有子树下的listqid中保存对应网页模板包含的所有网页的id。
[0026]一种网页模板的提取装置,包括:
[0027]构建单元,用于利用各个网页,分别构建各个DOM树;
[0028]队列生成单元,将各个DOM树中的节点名称按广度遍历加入各个队列,生成各个DOM树节点队列;
[0029]网页模板生成单元,用于对所有DOM树节点队列,按队列顺序取出节点名称进行比较,相同的加入DOM分类树节点中,不同的建立树分叉然后加入,得到对应各分类网页的DOM树网页模板。
[0030]所述构建单元,使用Jsoup将每一个网页的网页源码构建为一个DOM树,生成Document对象实例;使用Jsoup的select O方法找到注释类元素并删除。
[0031]所述队列生成单元,对每一个DOM树dp d2, , dn进行广度遍历,按遍历顺序使用tagNameO取出元素标签名称,将树节点的节点名称加入队列中,得到η个队列Q = {q^q2,...,qj,其中 Qi= {tn n,tni2,...,tnix},(I 彡 i 彡 n),ImijQ 彡 j 彡 x)表示第 i 个队列中的第j个元素的标签名称,其中得到qi的过程包括:
[0032]c)创建两个队列qe,qi,将根节点加入这两个队列中,队列作为进行广度遍历的暂存队列,Qi保存广度遍历结果;
[0033]d)从1队列头出队列一个元素,使用childrenO获得所有子元素,加入到q e和qi的队尾;
[0034]重复b)步,直到qe队列为空为止,得到一个DOM树遍历队列qi。
[0035]所述网页模板生成单元,用于设类别树节点的结构为node = {child,tagname,brother, listqid},其中,child记录该节点的第一个子节点,tagname保存当前节点元素的标签名称,brother保存当前节点的相邻兄弟节点,Iistid保存与从根节点到当前节点所构成树节点序列一致的所有%的下标,也就是i值的列表,包括:
[0036]c)从 Q = Iq1, q2,...,qn}中,取出{tnn,tn21,...,tnnl},以 tnn为初始值,新建 noden,表示类别树第一层的第一个节点,tnn— node n.tagname,I — noden.listqid,将tn21ig tn n比较,如果tn 21= tn n,则将2加入noden.listqid列表;如果不同,新建node12,作为类别树第一层的第二个节点,tn21— node 12.tagname, 2 — node12.listqid,node12— node n.brother,依次将tnn (2彡i彡n)与类别树第一层的所有节点noden、node12、...、nodelD^ tagname进行比较,相同的则将i值加入当前节点的listqid列表中,不同的则新建I1de1 (m+1),做类似上述node2的操作,将I1de1 (m+1)赋予node lm.brother,并将i值加入I1de1 (m+1).listqid,创建出类别树的第I层;
[0037]d)假设类别树的第k层已经扩展完毕,开始扩展类别树的k+Ι层,从第k层的第一个节点nodekl开始构建子树,取出node kl.listqid列表的第一个值i (从原列表中删除)所代表的Qi的第k+Ι个值tn i(k+1),新建node(k+1)1,赋予nodekl.child。并依次取出nodekl.listqid的队列id(从原列表中删除),将其代表的队列的第k+Ι个元素标签名称与tni(k+1)比较,依照a)中所述类别树扩展方式产生该子树。然后通过nodekl.brother取得
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1