CN101957816A - 基于多页面比较的网页元数据自动抽取方法和系统 - Google Patents

基于多页面比较的网页元数据自动抽取方法和系统 Download PDF

Info

Publication number
CN101957816A
CN101957816A CN2009100547012A CN200910054701A CN101957816A CN 101957816 A CN101957816 A CN 101957816A CN 2009100547012 A CN2009100547012 A CN 2009100547012A CN 200910054701 A CN200910054701 A CN 200910054701A CN 101957816 A CN101957816 A CN 101957816A
Authority
CN
China
Prior art keywords
metadata
page
template
webpage
token
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2009100547012A
Other languages
English (en)
Other versions
CN101957816B (zh
Inventor
甘雨
李沛剡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Huayan House Development Co., Ltd.
Original Assignee
SHANGHAI XIEYU NETWORK TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SHANGHAI XIEYU NETWORK TECHNOLOGY Co Ltd filed Critical SHANGHAI XIEYU NETWORK TECHNOLOGY Co Ltd
Priority to CN 200910054701 priority Critical patent/CN101957816B/zh
Publication of CN101957816A publication Critical patent/CN101957816A/zh
Application granted granted Critical
Publication of CN101957816B publication Critical patent/CN101957816B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明提供了一种基于多页面比较的网页元数据自动抽取方法和系统,属于互联网信息处理领域。互联网的页面都是用松散的HTML来组织的,而HTML语法验证不严格,语义和表现格式混合在一起,给网页数据抽取带来了很大的困难。本发明则能很好的解决这个问题。本发明基于一个假设“动态页面是由同一个模板填入不同的数据生成的”,因而可以通过比较多个相似的页面,进行规约推导,从而得到生成这组页面的模板。本发明包括以下部分:(1)网页采集器:从预设的网站抓取网页;(2)网页分类器:将相似的页面归为一组;(3)网页元数据分析模块:推导模板、抽取元数据;(4)网页元数据存储:存储和索引元数据;(5)元数据搜索引擎:检索和显示元数据。

Description

基于多页面比较的网页元数据自动抽取方法和系统
技术领域:
本发明属于互联网信息处理技术领域,尤其涉及网页元数据的自动抽取方法及系统。
背景技术:
随着互联网技术的飞速发展,互联网上的信息也以指数级增长,目前以网页为单位基于关键字匹配的信息检索方式已经很难满足人们日益增长的对信息的渴求。例如:有人想在网上查找价格在10到20万之间的汽车的相关信息,传统的搜索引擎就很难完成这种搜索。要满足这种信息检索的需求就必须将网页中的元数据提起出来,并进行存储和索引。然而从网页中提取元数据并非易事,因为互联网的页面都是用松散的HTML来组织的,而HTML语法验证不严格,结构松散,语义和表现格式混合在一起,这给网页数据抽取带来了很大的困难。
目前已有一些方法致力于解决网页数据抽取的问题,但它们都有各自的不足之处。人工模板的方法是通过由专业人员分析网页,利用XPATH或正则表达式来表示网页中元数据各个字段的位置,这种方法对每个网站都要写不同的模板,而且一旦目标网站的页面布局发生变化就必须修改模板,所以对模板维护的成本极高。而本发明使用时只需预先做一些配置,然后可以由程序自动发现模板,即使目标网站的页面布局发生变化,也无需修改程序或配置,即可推导新的模板。基于视觉的网页数据抽取方法比人工模板的方法具有更高的自动性,理论上准确性应该很高,但是实际应用中因为需要解析Javascript和CSS来得到网页中各个元素的位置和尺寸的信息,所以它对运行环境的资源要求较高,较高的运行要求导致这种方法用于大规模分布式快速抓取的价值不高。而本发明不需要处理Javascript和CSS,所以在资源开销和性能上更具有优势。
发明内容:
本发明的目的是提供一种通过多页面的比较来解决网页元数据自动抽取问题的方法及系统。它建立在一个假设“动态页面是由同一个模板填入不同的数据生成的”的基础之上,通过比较多个相似的页面,进行规约推导,从而得到生成这组页面的模板,再用得到的模板从网页中提取出元数据。
本发明的技术方案基于多页面比较的网页元数据自动抽取方法及系统,包括以下组成部分:
一、网页采集器
网页采集器负责从若干个预先设定好的网站抓取网页并存储下来,为后面的分析模块提供输入。
这里我们采用了Apache下面的一个开源项目Nutch,并在它的基础上进行了扩展。Nutch是一个开源Java实现的搜索引擎。它提供的Web爬虫可以从一个网站的入口地址出发,采用广度优先的策略,逐级向后遍历一定深度的页面。而且Nutch还支持分布式,它可以在多台机器上协同工作。
Nutch可以很好的满足传统搜索引擎的需求,但是对于元数据抽取来说,这样漫无目的地遍历页面效率比较低,其中很多页面对于具体应用来说都是无用页面。因而为了使网页抓取的目的性更强,提高Nutch爬虫的效率,我们对Nutch的源代码进行了扩展,把所有页面分为四类,并遵循一定的规则去遍历页面。
(一)列表页面:各个网站列出数据结果的页面,通常由一个列表和一组翻页链接构成,这是网页采集器起始的地址。例如:搜房网的房源列表页面http://esf.soufun.com/newsecond/sale_info/SearchList_New2.aspx,这是一个典型的列表页面,通过翻页列出更多的房源数据结果,从这个地址出发能有效地避开其他无关的新闻或广告等页面。网页收集器从这个页面出发,采用广度优先的策略,逐步向下深入抓取。同时我们还加入了智能链接分析技术,能够找到翻页的链接,从而可以遍历所有页,采集到更多的网页。
(二)数据页面:列出详细数据的页面。例如:上面给出的搜房网的房源结果页面列出了20套房子,每套房子的标题上都有一个链接,点击这个链接就可以看到房源的详细信息,这些页面就是数据页面,数据页面把一套房子的属性全部列出来了,因而,分析这个页面可以将房源的元数据提取出来。网页元数据分析模块主要从这类页面中提取元数据。这里数据页面的链接由用户用正则表达式事先指定好。
(三)导航页面:从列表页面到数据页面有时是直接的,有时会经过若干个页面才能到达,这些从列表页面到数据页面之间的中间页面就是导航页面。导航页面里面往往没有元数据,只是过渡到数据页面的桥梁,所以无需对其进行分析,只要处理它里面的链接就够了。这里导航页面的链接由用户用正则表达式事先配置好。
(四)干扰页面:一个网站里除列表页面、数据页面和导航页面之外的其他页面都是干扰页面,这些页面对于提取元数据没有任何帮助,所以不需要下载分析。
二、网页分类器
逐个输入网页采集器抓取的网页,将从同一个列表页面链接到的数据页面归为一类,批量输入给网页元数据分析模块,因为从同一个列表页面链接到的数据页面往往是由同一个模板生成的。
网页分类器是基于Hadoop开发的。Hadoop是Google MapReduce的一个开源Java实现。MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如同java程序员可以不考虑内存泄露一样,MapReduce的run-time系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器的失效,并且管理机器之间的通讯请求。这样的模式允许程序员可以不需要有什么并发处理或者分布式系统的经验,就可以处理超大的分布式系统得资源。
网页分类器利用Hadoop可以很好的在多台机器上处理大量的网页。
三、网页元数据分析模块
输入一组页面,选取其中若干个页面进行规约推导,得到这组页面的模板,再利用该模板对这组页面进行数据抽取,得到元数据,并存储下来。
参考说明书附图图2,网页元数据分析模块的主要步骤如下:
(一)读入min_infer个页面
min_infer是用户预先配置好的一个参数,表示每次推导最少使用多少个页面。min_infer会影响模板推导的质量,因为当页面太少时,可能把一部分元数据当成模板中不变的部分,从而忽略掉(在本发明中,把模板中变化部分当成元数据候选)。
(二)推导模板
这一部分将具体介绍模板推导的基本原理和算法。规约推导出的模板采用union-free regularexpression来表示。union-free regular expression的定义如下:
给定特殊符号#PCDATA和#SUBTREE和一个符号字母表∑包含#PCDATA和#SUBTREE,则union-freeregular expression是由字符集∑∪{#PCDATA,#SUBTREE,·,?,+,(,)}构成的字符串,且满足以下条件:
1.空串ε,∑∪{#PCDATA,#SUBTREE}中的任意元素是union-free regular expression;
2.如果a和b是union-free regular expression,那么a·b,(a)+,(a)?也是union-free regular expression。
上面是union-free regular expression的语法定义,其中,这些符号的语义分别是:
1.#PCDATA表示一个可变的文本串;
2.#SUBTREE表示一个HTML文档中的一个可变的子树,这个子树由其根节点唯一标识,而其内部的具体结构是可变的;
3.·是连接运算符,它将多个token按前后顺序组合在一起;
4.?是可选运算符,表示某个token或一组token可能出现,也可能不出现;
5.+是迭代运算符,表示某个token或一组token可能出现多次。
这里采用了与之等价的XML格式来存储推导出的模板。一个模板的XML文档的根节点为expression节点。expression节点下面可以包含variant、subtree、and、hook和plus节点中的任意一个。
1.variant节点与#PCDATA等价;
2.subtree节点与#SUBTREE等价,它这个子树的根节点唯一标识,并且保存了这个子树的根节点的标签名,属性和在DOM树中的深度;
3.and节点与·运算符等价,它可以包含variant、subtree、and、hook和plus节点中的任意多个;
4.hook节点与?运算符等价,它可以包含variant、subtree、and、hook和plus节点中的任意一个;
5.plus节点与+运算符等价,它可以包含variant、subtree、and、hook和plus节点中的任意一个。
union-free regular expression对应的XML表示方式在内存里以树形结构来表示,存储到数据库中时用XML文本串来表示。
模板推导的步骤如下:
1.对网页进行预处理,将HTML文档转换为标准的XML文档,并且根据用户的设定清除一些标签或节点,或合并一些节点。这些标签或节点往往是可有可无的,仅仅用于排版,没有任何特殊的语义,如font标签,font标签可以在做页面分析时忽略,被font标签拆分开的多个文本节点也可以合并到一起。类似这样标签是可配置的,用户可以把它们写入一个配置文件中。
2.将预处理后HTML文档分解为一组token。这里的token包括3种,开始标签,结束标签和文本,每个token都保存了它的深度信息,即:该token在DOM树中的深度。
3.比较2个HTML文档的token串,推导出一个用union-free regular expression表示的模板。
4.判断是否还有HTML文档需要参与推导,若无,则结束推导,并且输出目前推导出的模板;若有,则到第5步。
5.用目前推导出的模板与一个新的HTML文档的token串进行比较,对模板进行求精,推导出一个新的模板。然后再执行第4步。
以上第3步中比较2个HTML文档的token串,推导模板的具体步骤描述如下:
1.分别从2个HTML文档的token流中逐个读出token进行比较,直到两个token串都到达末尾是停止,输出结果模板。
a)如果两个token都是文本,且内容完全一样,则将这个token加入到结果模板中,继续执行第1步;
b)如果两个token都是标签,且是相同的标签(标签名、属性和在DOM树中的深度相同),则将这个token加入到结果模板中,继续执行第1步;
c)其他情况下,即两个token不匹配时,则执行第2步解决冲突。
2.分别采用以下方案来解决冲突。
a)如果两个token都是文本,但内容不一样,则引入#PCDATA符号解决冲突,将#PCDATA加入到结果模板中,继续执行第(1)步。
b)如果两个token都是标签,但不是相同的标签,假设分别为tag1、tag2,则依次尝试下列方式:
i.如果tag1是开始标签,匹配tag1块(即:tag1与其对应结束标签之间的token串)和tag1的上一个token块,如果匹配成功,则继续再往上匹配一个token块,直到失败为止。如果匹配的次数大于0,则将tag1块结合plus操作加入结果模板中,并将目前发生匹配冲突的位置、现在的结果模板和已尝试过的解决冲突的方式存入栈中,继续执行第1步。
ii.如果tag2是开始标签,匹配tag2块(即:tag2与其对应结束标签之间的token串)和tag2的上一个token块,如果匹配成功,则继续再往上匹配一个token块,直到失败为止。如果匹配的次数大于0,则将tag2块结合plus操作加入结果模板中,并将目前发生匹配冲突的位置、现在的结果模板和已尝试过的解决冲突的方式存入栈中,继续执行第1步。
iii.如果tag1是开始标签,将tag1块(即:tag1与其对应结束标签之间的token串)结合hook操作加入结果模板中,并将目前发生匹配冲突的位置、现在的结果模板和已尝试过的解决冲突的方式存入栈中,继续执行第1步。
iv.如果tag2是开始标签,将tag2块(即:tag2与其对应结束标签之间的token串)结合hook操作加入结果模板中,并将目前发生匹配冲突的位置、现在的结果模板和已尝试过的解决冲突的方式存入栈中,继续执行第1步。
v.上一个匹配的标签是开始标签last_tag,且深度比这两个失配的标签小1,则将#SUBTREE加入到结果模板中,#SUBTREE的根节点为last_tag,并将目前发生匹配冲突的位置、现在的结果模板和已尝试过的解决冲突的方式存入栈中,继续执行第1步。
vi.如果以上尝试均失败,但是栈不为空,则将栈顶出栈,将栈顶所保存的发生匹配冲突的位置和结果模板替换现有的发生匹配冲突的位置和结果模板,并尝试未尝试的解决冲突的方式。如果栈为空,则整个推导过程失败。
附图图3(a)中有两个具体的HTML文档,比较它们得到模板的具体过程如下:
1.分别从2个HTML文档的token流中逐个读出token进行比较,在token 04处不匹配,符合上面的原则(a)的要求,因此引入#PCDATA;
2.继续比较,在token 08处又出现不匹配,不符合上面的原则(a)的要求,因此尝试原则
(b)中几种解决冲突的方法,尝试(I)、(II)失败,采用(III)引入hook操作解决冲突;
3.继续比较,经过几次通过引入#PCDATA解决冲突之后,在文档1的token 39和文档2的token37处又出现不匹配,不符合上面的原则(a)的要求,因此尝试原则(b)中几种解决冲突的方法,尝试(I)方案,将token块不断向上匹配,从而得到迭代的token块,引入plus操作解决冲突;
4.继续比较,直到两个文档的末尾,推导成功,得到附图图3(b)中的模板。
得到模板后还需要通过元数据标识器将页面模板中变化的部分,即元数据的候选,与元数据中的相应字段对应起来。元数据标识器需要用户事先提供一些关于元数据各个字段的信息,包括:
1.元数据各个字段可能用的标签,如书的元数据字段price,在网页中可能用到的标签有“价格”、“售价”和“折扣价”等等;
2.用正则表达式表示的元数据各个字段必然会满足的模式;
3.元数据各个字段的长度的最大值和最小值。
元数据标识器采用了以下启发式原则来识别模板中的元数据字段:
1.页面模板中变化的部分是元数据的候选;
2.对于页面模板中每个变化的部分,如果有前缀,且这个前缀里至少包含两个汉字,则这个前缀是元数据的标签候选,它会提供一些线索,告诉我们这个变化的部分是否是元数据的某个字段,以及是元数据的哪个字段;
3.页面模板中变化的部分之前的2-3个不变的部分中,如果其至少包含两个汉字,则是元数据的标签候选;
4.如果某个元数据的候选是元数据的某个字段,则它的标签候选应该出现在用户提供的该元数据字段可能用的标签列表中;
5.如果某个元数据的候选是元数据的某个字段,则它的值应该满足用户描述的该元数据字段的正则表达式;
6.如果某个元数据的候选是元数据的某个字段,则它必须满足用户描述的该元数据字段的长度限制。
(三)评估模板
用户需要预先配置好需要抽取的元数据的定义信息,其中包括关于哪些元数据字段是必须的,总共至少需要抽取到多少个元数据字段的信息。模板评估模块利用这些信息对推导得到的模板进行评估,如果模板达到了这个目标,则进行第IV步;否则,再输入一个页面进行第II步的推导,直到输入的页面数量超过了max_infer(用户预先设定的最大的推导页面数量),此时记录下错误,等待人工解决。出现页面数量超过max_infer却没有得到合适的模板很可能是因为配置信息对目标页面不适用,我们实践中遇到最多的情况是:
1.如抽取房源信息时,价格是必须的元数据字段,但是目标页面是一组新闻页面,没有价格信息,经过推导得到的模板里也没有必须的价格元数据。遇到这种情况需要修改数据页面的正则表达式,使之更严格,从而过滤掉新闻页面;
2.如抽取房源信息时,价格是必须的元数据字段,目标页面中用于标识价格的标签是“短租价”,而配置信息中没有提供这个标签,因而导致元数据标识器无法识别模板中的该项数据,从而经过推导得到的模板里缺少了必须的价格元数据。遇到这种情况需要调整设置,把“短租价”加入到价格标签候选中;
3.如抽取房源信息时,把建筑年代设置为了必须的元数据字段,但是目标页面中确实没有提供对建筑年代的描述。遇到这种情况需要调整设置,把建筑年代设为可选的元数据字段。
(四)用模板抽取元数据
推导得到的模板用union-free regular expression表示,在内存里以树形结构来来存储。用模板抽取元数据的过程就是对模板的union-free regular expression树形结构(简称URE-tree)进行深度优先遍历,并将各节点与HTML页面的token进行匹配的过程。其算法描述如下:
输入:URE-tree,token-stream
输出:是否匹配
变量:current-token指向token-stream当前位置的指针
过程:从左向右依次读取URE-tree的子节点
1.如果该节点是叶节点,则将之与current-token比较
a)如果该节点是标签,且current-token也是标签,则继续遍历URE-tree的下一个子节点,且current-token向后移一个位置;
b)如果该节点是#PCDATA,且current-token也是文本,则将该文本存入到抽取结果中,并继续遍历URE-tree的下一个子节点,且current-token向后移一个位置;
c)如果该节点是#SUBTREE,且current-token是标签并与该#SUBTREE节点保存的该可变子树的根节点的标签名、属性和DOM树深度一致,则将该子树的所有文本节点合并、存入到抽取结果中,并将current-token向后移动直到下一个与current-token深度相同的token;
d)其他情况表示URE-tree和token流不匹配,则直接返回假,并退出算法。
2.如果该节点是and节点,则对该子树调用本算法,如果返回为真,则继续遍历URE-tree的下一个子节点;否则,直接返回假,并退出算法。
3.如果该节点是hook节点,则执行以下操作:
a)将current-token保存到token-position中;
b)对该子树调用本算法,如果返回为真,则继续遍历URE-tree的下一个子节点;否则,将token-position恢复到current-token中,再继续遍历URE-tree的下一个子节点。
4.如果该节点是plus节点,则执行以下操作:
a)将current-token保存到token-position中;
b)对该子树调用本算法;
c)如果第b步返回为真,则继续执行第a步;否则将token-position恢复到current-token中,再继续遍历URE-tree的下一个子节点。
如果URE-tree的子节点全部遍历完毕,则返回真。
四、网页元数据存储
存储并索引网页元数据分析模块得到的结果。本发明采用数据库加全文索引的方式来存储网页元数据。抽取到的原始的网页元数据保存在数据库中,但是考虑到前台全文检索的性能要求,我们利用Compass全文索引引擎定时地将数据库中的网页元数据镜像到全文索引中,然后前台的用户检索全部由Compass来处理。
Compass是一个建立在Lucene之上的开源项目,旨在将搜索引擎以最简单的方式整合到Java应用中。Lucene提供了一个高性能的全文检索引擎的Java实现,而Compass则使得Lucene使用起来更简单,它可以将POJO、XML和数据库记录方便地写入到全文索引中去。
五、元数据搜索引擎
用于检索和显示分析后的元数据。该模块提供了UI给用户输入对各个元数据字段的限制条件,然后利用用户提供的查询条件去检索Compass建立的全文索引,并将检索的结果列出来。
本发明的优点和积极效果:
本发明的优点是对于处理半结构化网页,具有较高的自动性,并且有较快的处理速度和较高的准确度,用户使用本发明时,只需要预先配置一些通用参数即可工作,可以很好的应对目标网站上网页布局的变化,减少了人工维护模板的重复劳动。本发明的方法能够很好的处理半结构化网页,具有较好的实用价值。
附图说明
图1给出了本发明组成结构的示意图。
图2给出了本发明的网页元数据分析模块的流程图。
图3给出了比较两个HTML文档得到模板的具体过程的示意图。
图4给出了使用本发明对搜房网进行元数据抽取得到的效果示意图。
具体实施方式
以下结合一个对房源信息进行整合的例子,详细描述本发明的具体实施方式。
本具体实施方式描述的是对互联网上的房产网站的房源页面元数据的抽取方法。房源信息的整合工作,目标是为在互联网上的找房者提供一个房源信息的集成平台,他们只需通过在一个网站上搜索就可以找到互联网上所有网站的房源。作为其重要环节的元数据抽取步骤,需要对半结构化网页能够达到较好的抽取精确性,并具有处理结构松散文档的能力。
本具体实施方式中,对元数据的抽取包括以下几个步骤:
1.配置网页收集器
这里要定义需要收集网页的网站,每个网站需要定义以下信息:
1)网站名称:各个网站的名字,如:搜房网,焦点房地产等等;
2)列表连接列表:若干个列表链接,这是网页收集器起始的地址;
3)数据页面的正则表达式:若干个表示链接的正则表达式,符合这些正则表达式中的某一个则是数据页面的链接,数据页面列出了详细数据,它会被输入到网页元数据分析模块中以提取元数据;
4)导航页面的正则表达式:若干个表示链接的正则表达式,符合这些正则表达式中的某一个则是导航页面的链接,该类页面会被下载下来,并且会分析其中的链接,但是不会用于元数据的提取;
5)搜索层数:网页收集器遍历网页的最大深度。
以搜房网为例,来说明如何定义一个网站:
1)网站名称:搜房网;
2)列表链接列表页面:http://esf.sh.soufun.com/newsecond/sale_info/searchlist_new2. aspx
3)数据页面的正则表达式:^http://esf.[^.]+.soufun.com/chushou/2_\d+_\d+.htm$;
4)导航页面的正则表达式:^http://esf.sh.soufun.com/00010_0_0_0_0_0_0_\d+_0_0_0_0/,该类链接主要用于对结果列表进行翻页;
5)搜索层数:4。
配置好了网页采集器之后,运行本发明的主程序,网页采集器就会从http://esf.sh.soufun.com/newsecond/sale_info/searchlist_new2.aspx页面出发以广度优先策略开始逐层收集网页,因为配置了数据页面和导航页面的正则表达式,其他无关的页面便会被过滤掉,网页收集器只会下载房源详细信息页面链接和翻页的链接。
2.配置网页元数据分析模块
这里需要配置网页预处理的参数、运行时参数和元数据标识器的参数。网页预处理的参数有:
1)freetextTags:这一类标签会被网页预处理程序忽略掉,而只保留其文本节点的内容,如果有相邻的若干个这一类标签,它们的文本节点还会被合并成一个文本节点,这样做可以减小网页的复杂度;
2)skipTags:这类标签会被忽略掉,但是它们的子节点仍然会被处理;
3)skipTrees:这类标签及其子节点都被完全忽略掉;
4)skipAttributes:表示哪些属性在预处理时会被忽略掉,即:这些属性不会保存下来,在后面的标签比较的过程中也不会将这些属性考虑在内;
5)attributeValues:表示哪些属性在预处理时会被保留下来,即:这些属性会被保存下来,在后面的标签比较的过程中也会用到这些属性,两个标签相等必须满足对应属性页相同。
网页元数据分析模块的运行时参数采用Spring的方式配置在一个AdeContext对象的属性里:
1)wrapperEvaluator:配置一个模板评估器的实例,模板评估器有一个threshold属性,表示模板中必须至少已发现threshold个元数据的字段;
2)parsedResultHandlers:用户提供的一个类,它必须实现ParsedResultHandler接口,用于对抽取出的元数据进行一些处理,如对数据的单位进行换算,或把自然语言描述的属性映射为某种编码;
3)min_page_infer:表示每次推导最少使用多少个页面。min_infer会影响模板推导的质量,因为当页面太少时,可能把一部分元数据当成模板中不变的部分,从而忽略掉(在本发明中,把模板中变化部分当成元数据候选);
4)max_page_infer:表示每次推导最多使用多少个页面,因为模板推导算法的时间复杂度与比较的页面数量和页面中token的数量成正比,所以推导时也不宜输入太多的页面,这样会影响性能;
5)threads:工作线程的数量;
6)work_capacity:页面输入队列的长度,当该队列满了之后,输入页面的线程会进入阻塞状态,直到该队列又有空间为止。
7)max_idle:工作线程空闲的最大时间,单位为分钟,超过这个时间就把线程结束掉;
8)debug:表示是否调试状态,在调试状态下会显示一些调试信息,并且会将推导得到的模板,以及抽取得到的数据集,以XML的形式写入到磁盘,然后通过XSL可以将数据集形象地显示出来,这样有助于发现模板推导的bug,效果参考附图4-d。
元数据标识器的参数采用Spring的方式将一组LabelRule类的实例预先初始化好,在运行时,直接从Spring容器中将LabelRule类的实例读出,并应用其相应的方法来识别元数据的字段。LabelRule有若干个参数可以配置:
1)labelName:表示该LabelRule用于识别的元数据字段的名字;
2)labelKeyword:该元数据字段可能用到的标签,如书的元数据字段price,在网页中可能用到的标签有“价格”、“售价”和“折扣价”;
3)valuePattern:用正则表达式表示的该元数据字段必然会满足的模式;
4)maxLength:该元数据字段的长度不得超过这个值;
5)minLength:该元数据字段的长度不得小于这个值;
6)necessary:表示该元数据字段是否是必不可少的,该属性主要是在模板评估中有用。
下面是网页元数据分析模块运行时参数和元数据标识器参数的配置实例片段:
Figure B2009100547012D0000101
Figure B2009100547012D0000111
3.配置Compass Mapping配置文件
Compass Mapping配置文件用于描述POJO的属性与全文索引中元数据的对应关系。Compass Mapping配置文件完成后,Compass就会透明地为我们完成POJO存储到全文索引中和从全文索引中检索POJO的任务。
下面是对Property类的Compass Mapping定义,各个标签的具体功能如下:
1)compass-core-mapping:每个Compass Mapping文件的根节点,这里可以描述默认的包名称;
2)class:每个类定义的根节点。name属性描述这个类的名称;alias是这个类的唯一别名在检索时使用;root属性表示这是个独立的类,而不是其他类的一部分;poly属性表示是否考虑类的多态性;
3)id:描述类里面用于作为对象唯一标识符的属性;
4)meta-data:描述id或属性对应的全文索引中的元数据的名称,format属性表示存入全文索引的格式;
5)property:描述类里面的一个属性,并提供一个全文索引中的元数据与之对应。
4.运行主程序
以上配置完成后,运行本发明的主程序,它将会按照配置去抽取搜房网的房源信息。参考附图图1,具体过程如下:
1)网页收集
按照对搜房网的配置,从用户提供的列表页面链接出发,在广度优先的策略遍历下载满足数据页面和导航页面正则表达式的链接。即首先下载列表页面http://esf.sh.soufun.com/newsecond/sale_info/searchlist_new2.aspx,然后分析该列表页面的链接,再下载满足正则表达式^http://esf.[^.]+.soufun.com/chushou/2_\d+_\d+.htm$和^http://esf.sh.soufun.com/00010_0_0_0_0_0_0\d+_0_0_0_0/的页面;对于下载下来的满足正则表达式^http://esf.sh.soufun.com/00010_0_0_0_0_0_0\d+_0_0_0_0/的页面,认为是导航页面,继续分析其包含的链接,再下载满足上面两个正则表达式的页面;对于满足正则表达式^http://esf.[^.]+.soufun.com/chushou/2_\d+_\d+.htm$的页面,认为是数据页面,不再下载其链接,记录下其所来自的列表页面的链接;如此周而复始,直到没有页面可下,或者访问的深度达到4为止。
2)网页分类
逐个读入网页采集器下载的页面,对于数据页面,即:满足正则表达式^http://esf.[^.]+.soufun.com/chushou/2_\d+_\d+.htm$的页面,根据其来自的列表页面进行分组。这里因为网站配置里面只配置了一个列表页面链接,所以所有数据页面全部分为一个组。其他页面均忽略掉。
3)分析页面
读入一组页面,选取3个页面进行模板的推导。模板推导过程中,这些页面会先经过预处理,转化成标准的XML,并根据用户配置去掉一些标签;然后将整个文档切分成token串,再比较token串规约推导出模板;模板经过元数据标识器发现其中的元数据字段,再进行评估,看该模板是否满足用户预先设定的目标,如果满足则用该模板对剩下的页面进行应用,抽取出页面中的元数据并存储进数据库;如果模板不满足用户预先设定的目标,则再加入一个新的页面进行推导,直到用6个页面进行推导;如果用6个页面进行推导得到的模板,仍不满足用户预先设定的目标,则将错误记录在日志里。
参考附图图4,可以看到从部分页面中抽取到的数据,这里因为将debug选项打开了,所以在模板推导过程中,推导得到的模板,以及抽取得到的数据集,会以XML的形式写入到磁盘,然后通过XSL就可以将数据集形象地显示出来。
5.元数据索引
为了让前台的检索,尤其是全文检索更有效率,需要将本发明中元数据存储部分中的元数据索引模块加入到系统的定时任务中,定期地对数据建立全文索引。
6.用户检索
用户可以在我们的搜索页面里输入搜索的关键字和一些条件,系统会很快地查询出满足条件的房源信息,并且和搜房网上的数据是一致的。

Claims (9)

1.基于多页面比较的网页元数据自动抽取方法及系统,包括以下部分:
(1)网页采集器:从若干个预先设定好的网站抓取网页并存储下来,为后面的分析模块提供输入;
(2)网页分类器:逐个输入网页收集器抓取的网页,将从同一个列表页面链接出去的页面作为一类页面,批量输入给网页元数据分析模块;
(3)网页元数据分析模块:输入一组页面,选取其中若干个页面进行规约推导,得到这组页面的模板,再利用该模板对这组页面进行数据抽取,得到元数据,并存储下来;
(4)网页元数据存储:存储并索引网页元数据分析模块得到的结果;
(5)元数据搜索引擎:用于检索和显示分析后的元数据。
2.如权利要求1所述的元数据自动抽取方法及系统,所述部分(1)中,将所有网页分为四类区别对待,使网页抓取的目的性更强,从而提高了网页抓取的效率。
(1)列表页面:各个网站列出数据结果的页面。这是网页收集器起始的地址,网页收集器从这个页面出发,采用广度优先的策略,逐步向下深入抓取;
(2)数据页面:列出详细数据的页面。网页元数据分析模块主要从这类页面中提取元数据;
(3)导航页面:从列表页面到数据页面有时是直接的,有时会经过若干个页面才能到达,这些从列表页面到数据页面之间的中间页面就是导航页面;
(4)干扰页面:一个网站里除列表页面、数据页面和导航页面之外的其他页面,这些页面对于提取元数据没有任何帮助,所以不需要下载下来。
3.如权利要求1所述的元数据自动抽取方法及系统,所述部分(3)基于假设“相似的一组动态网页一般是由同一个模板填入不同的数据生成的”,因而,可以通过比较一组相似的网页,区分其不变的部分,和变化的部分,发现其变化规律,从而得到生成这组页面的模板。
4.如权利要求1所述的元数据自动抽取方法及系统,所述部分(3)中规约推导出的模板采用了union-free regular expression来表示,并采用了与之等价的XML格式来存储。这里的union-free regular expression建立在一个包括两个特殊符号#PCDATA和#SUBTREE的字母表上,并包括3种操作符,连接,可选和迭代。#PCDATA表示一个可变的文本串;#SUBTREE表示一个HTML文档中的一个可变的子树,这个子树由其根节点唯一标识,而其内部的具体结构是可变的。连接是将多个token按前后顺序组合在一起;可选表示某个token或一组token可能出现,也可能不出现;迭代表示某个token或一组token可能出现多次。
5.如权利要求1所述的元数据自动抽取方法及系统,所述部分(3)又包括以下部分:
(1)模板推导器:比较一组网页,进行规约推导,得到这组页面的模板;
(2)元数据标识器:页面模板中变化的部分是元数据的候选,其中可能包括一些干扰信息,元数据标识器可以从元数据的候选中将元数据挑出来,并将页面模板中各个变化的部分与元数据的某个字段对应起来;
(3)模板评估器:将模板中识别到的元数据的字段与用户预设的目标(哪些元数据的字段是必须的,至少需要抽取到多少个元数据字段)进行比较,如果达到目标则接受该模板,否则,进一步进行推导;
(4)模板执行器:执行推导出来的页面模板,抽取出元数据;
(5)抽取结果处理模块:该模块是一个接口,由用户自己实现,对抽取出的元数据进行一些处理,如对数据的单位进行换算,或把自然语言描述的属性映射为某种编码。
6.如权利要求5所述的元数据分析模块,所述部分(1)包括以下步骤:
(1)对网页进行预处理,将HTML文档转换为标准的XML文档,并且根据用户的设定清除一些标签或节点,或合并一些节点。这些标签或节点往往是可有可无的,仅仅用于排版,没有任何特殊的语义,如font标签,font标签可以在做页面分析时忽略,被font标签拆分开的多个文本节点也可以合并到一起;
(2)将预处理后HTML文档分解为一组token。这里的token包括3种,开始标签,结束标签和文本;
(3)比较2个HTML文档的token串,推导出一个用union-free regular expression表示的模板;
(4)判断是否还有HTML文档需要参与推导,若无,则结束推导输出目前推导出的模板;若有,则到第(5)步;
(5)用目前推导出的模板与一个新的HTML文档的token串进行比较,对模板进行求精,推导出一个新的模板。然后再执行第(4)步;
7.如权利要求5所述的元数据分析模块,所述部分(2)需要用户事先提供一些关于元数据各个字段的信息,包括:
(1)元数据各个字段可能用的标签,如书的元数据字段price,在网页中可能用到的标签有“价格”、“售价”和“折扣价”等等;
(2)用正则表达式表示的元数据各个字段必然会满足的模式;
(3)元数据各个字段的长度的最大值和最小值。
8.如权利要求5所述的元数据分析模块,所述部分(2)采用了以下启发式原则:
(1)页面模板中变化的部分是元数据的候选;
(2)对于页面模板中每个变化的部分,如果有前缀,且这个前缀里至少包含两个汉字,则这个前缀是元数据的标签候选,它会提供一些线索,告诉我们这个变化的部分是否是元数据的某个字段,以及是元数据的哪个字段;
(3)页面模板中变化的部分之前的2-3个不变的部分中,如果其至少包含两个汉字,则是元数据的标签候选;
(4)如果某个元数据的候选是元数据的某个字段,则它的标签候选应该出现在用户提供的该元数据字段可能用的标签列表中;
(5)如果某个元数据的候选是元数据的某个字段,则它的值应该满足用户描述的该元数据字段的正则表达式;
(6)如果某个元数据的候选是元数据的某个字段,则它必须满足用户描述的该元数据字段的长度限制。
9.如权利要求1所述的元数据自动抽取方法及系统,所述部分(2)将从同一个列表页面链接到的数据页面归为一类,因为从同一个列表页面链接到的数据页面往往满足权利要求3中所述的假设。
CN 200910054701 2009-07-13 2009-07-13 基于多页面比较的网页元数据自动抽取方法和系统 Expired - Fee Related CN101957816B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200910054701 CN101957816B (zh) 2009-07-13 2009-07-13 基于多页面比较的网页元数据自动抽取方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200910054701 CN101957816B (zh) 2009-07-13 2009-07-13 基于多页面比较的网页元数据自动抽取方法和系统

Publications (2)

Publication Number Publication Date
CN101957816A true CN101957816A (zh) 2011-01-26
CN101957816B CN101957816B (zh) 2013-03-20

Family

ID=43485149

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200910054701 Expired - Fee Related CN101957816B (zh) 2009-07-13 2009-07-13 基于多页面比较的网页元数据自动抽取方法和系统

Country Status (1)

Country Link
CN (1) CN101957816B (zh)

Cited By (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102222310A (zh) * 2011-07-18 2011-10-19 深圳证券信息有限公司 证券信息发布方法和平台
CN102819597A (zh) * 2012-08-13 2012-12-12 北京星网锐捷网络技术有限公司 网页分类方法及设备
CN102968466A (zh) * 2012-11-09 2013-03-13 同济大学 基于网页分类的索引网络构建方法及其索引网构建器
CN103544176A (zh) * 2012-07-13 2014-01-29 百度在线网络技术(北京)有限公司 用于生成多个页面所对应的页面结构模板的方法和设备
CN103870567A (zh) * 2014-03-11 2014-06-18 浪潮集团有限公司 一种云计算中垂直搜索引擎网页采集模板自动识别方法
CN103914523A (zh) * 2014-03-24 2014-07-09 小米科技有限责任公司 页面回退控制方法及装置
CN104317948A (zh) * 2014-11-05 2015-01-28 北京中科辅龙信息技术有限公司 页面数据抓取方法和系统
CN104424334A (zh) * 2013-09-11 2015-03-18 方正信息产业控股有限公司 Xml文档节点的构建方法和装置
CN105144080A (zh) * 2013-03-15 2015-12-09 起元技术有限责任公司 用于元数据管理的系统
CN105335516A (zh) * 2015-11-04 2016-02-17 浪潮软件集团有限公司 一种通用采集系统的构建方法
CN105653531A (zh) * 2014-11-12 2016-06-08 中兴通讯股份有限公司 数据提取方法及装置
CN105955984A (zh) * 2016-04-19 2016-09-21 中国银联股份有限公司 基于爬虫模式的网络数据搜索方法
CN106716403A (zh) * 2014-07-01 2017-05-24 埃夫里蒙多有限责任公司 网站入口页面的自动生成
US9679076B2 (en) 2014-03-24 2017-06-13 Xiaomi Inc. Method and device for controlling page rollback
CN107092689A (zh) * 2017-04-24 2017-08-25 深圳市茁壮网络股份有限公司 元数据生成方法及系统
CN107992556A (zh) * 2017-11-28 2018-05-04 福建中金在线信息科技有限公司 一种站点管理方法、装置、电子设备以及存储介质
CN108090080A (zh) * 2016-11-22 2018-05-29 北京京东尚科信息技术有限公司 用于替换解析模板的方法与系统及爬取方法
US10108590B2 (en) 2013-05-03 2018-10-23 International Business Machines Corporation Comparing markup language files
CN108763279A (zh) * 2018-04-11 2018-11-06 北京中科闻歌科技股份有限公司 一种网页数据分布式模板采集方法及系统
CN109445784A (zh) * 2018-09-29 2019-03-08 Oppo广东移动通信有限公司 结构数据的处理方法、装置、存储介质及电子设备
CN111125565A (zh) * 2019-11-01 2020-05-08 上海掌门科技有限公司 一种在应用中输入信息的方法与设备
CN111125589A (zh) * 2018-10-31 2020-05-08 北大方正集团有限公司 数据采集方法及装置、计算机可读存储介质
CN111460442A (zh) * 2020-04-24 2020-07-28 怀化学院 一种基于互联网交叉搜索缺陷的攻击检测方法
CN112035722A (zh) * 2020-08-04 2020-12-04 北京启明星辰信息安全技术有限公司 提取动态网页信息的方法、装置及计算机可读存储介质
CN116702702A (zh) * 2023-04-14 2023-09-05 北京雅昌艺术印刷有限公司 一种基于xml的自动排版方法及系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101404666A (zh) * 2008-10-06 2009-04-08 赵洪宇 一种基于Web页无限层采集方法
CN101464905B (zh) * 2009-01-08 2011-03-23 中国科学院计算技术研究所 一种网页信息抽取的系统及方法

Cited By (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102222310A (zh) * 2011-07-18 2011-10-19 深圳证券信息有限公司 证券信息发布方法和平台
CN103544176A (zh) * 2012-07-13 2014-01-29 百度在线网络技术(北京)有限公司 用于生成多个页面所对应的页面结构模板的方法和设备
CN103544176B (zh) * 2012-07-13 2018-08-10 百度在线网络技术(北京)有限公司 用于生成多个页面所对应的页面结构模板的方法和设备
CN102819597B (zh) * 2012-08-13 2015-04-22 北京星网锐捷网络技术有限公司 网页分类方法及设备
CN102819597A (zh) * 2012-08-13 2012-12-12 北京星网锐捷网络技术有限公司 网页分类方法及设备
CN102968466A (zh) * 2012-11-09 2013-03-13 同济大学 基于网页分类的索引网络构建方法及其索引网构建器
CN102968466B (zh) * 2012-11-09 2016-05-18 同济大学 基于网页分类的索引网络构建方法及其索引网构建器
CN105144080A (zh) * 2013-03-15 2015-12-09 起元技术有限责任公司 用于元数据管理的系统
US10108591B2 (en) 2013-05-03 2018-10-23 International Business Machines Corporation Comparing markup language files
US10108590B2 (en) 2013-05-03 2018-10-23 International Business Machines Corporation Comparing markup language files
CN104424334A (zh) * 2013-09-11 2015-03-18 方正信息产业控股有限公司 Xml文档节点的构建方法和装置
CN103870567A (zh) * 2014-03-11 2014-06-18 浪潮集团有限公司 一种云计算中垂直搜索引擎网页采集模板自动识别方法
CN103914523A (zh) * 2014-03-24 2014-07-09 小米科技有限责任公司 页面回退控制方法及装置
US9679076B2 (en) 2014-03-24 2017-06-13 Xiaomi Inc. Method and device for controlling page rollback
CN106716403A (zh) * 2014-07-01 2017-05-24 埃夫里蒙多有限责任公司 网站入口页面的自动生成
CN104317948A (zh) * 2014-11-05 2015-01-28 北京中科辅龙信息技术有限公司 页面数据抓取方法和系统
CN105653531B (zh) * 2014-11-12 2020-02-07 中兴通讯股份有限公司 数据提取方法及装置
CN105653531A (zh) * 2014-11-12 2016-06-08 中兴通讯股份有限公司 数据提取方法及装置
CN105335516A (zh) * 2015-11-04 2016-02-17 浪潮软件集团有限公司 一种通用采集系统的构建方法
CN105955984A (zh) * 2016-04-19 2016-09-21 中国银联股份有限公司 基于爬虫模式的网络数据搜索方法
CN108090080A (zh) * 2016-11-22 2018-05-29 北京京东尚科信息技术有限公司 用于替换解析模板的方法与系统及爬取方法
CN107092689A (zh) * 2017-04-24 2017-08-25 深圳市茁壮网络股份有限公司 元数据生成方法及系统
CN107992556B (zh) * 2017-11-28 2020-08-21 福建中金在线信息科技有限公司 一种站点管理方法、装置、电子设备以及存储介质
CN107992556A (zh) * 2017-11-28 2018-05-04 福建中金在线信息科技有限公司 一种站点管理方法、装置、电子设备以及存储介质
CN108763279A (zh) * 2018-04-11 2018-11-06 北京中科闻歌科技股份有限公司 一种网页数据分布式模板采集方法及系统
CN109445784A (zh) * 2018-09-29 2019-03-08 Oppo广东移动通信有限公司 结构数据的处理方法、装置、存储介质及电子设备
CN109445784B (zh) * 2018-09-29 2020-08-14 Oppo广东移动通信有限公司 结构数据的处理方法、装置、存储介质及电子设备
CN111125589A (zh) * 2018-10-31 2020-05-08 北大方正集团有限公司 数据采集方法及装置、计算机可读存储介质
CN111125589B (zh) * 2018-10-31 2023-09-05 新方正控股发展有限责任公司 数据采集方法及装置、计算机可读存储介质
CN111125565A (zh) * 2019-11-01 2020-05-08 上海掌门科技有限公司 一种在应用中输入信息的方法与设备
CN111460442A (zh) * 2020-04-24 2020-07-28 怀化学院 一种基于互联网交叉搜索缺陷的攻击检测方法
CN112035722A (zh) * 2020-08-04 2020-12-04 北京启明星辰信息安全技术有限公司 提取动态网页信息的方法、装置及计算机可读存储介质
CN112035722B (zh) * 2020-08-04 2023-10-13 北京启明星辰信息安全技术有限公司 提取动态网页信息的方法、装置及计算机可读存储介质
CN116702702A (zh) * 2023-04-14 2023-09-05 北京雅昌艺术印刷有限公司 一种基于xml的自动排版方法及系统
CN116702702B (zh) * 2023-04-14 2024-02-13 北京雅昌艺术印刷有限公司 一种基于xml的自动排版方法及系统

Also Published As

Publication number Publication date
CN101957816B (zh) 2013-03-20

Similar Documents

Publication Publication Date Title
CN101957816B (zh) 基于多页面比较的网页元数据自动抽取方法和系统
CN103823824B (zh) 一种借助互联网自动构建文本分类语料库的方法及系统
CN101464905B (zh) 一种网页信息抽取的系统及方法
US6606625B1 (en) Wrapper induction by hierarchical data analysis
CN103136360B (zh) 一种互联网行为标注引擎及对应该引擎的行为标注方法
US7739257B2 (en) Search engine
Peters et al. Content extraction using diverse feature sets
CN101908071B (zh) 一种提高搜索引擎搜索效率的方法及其系统
CN101727498A (zh) 一种基于web结构的网页信息自动提取方法
CN103559234B (zh) RESTful Web服务的自动化语义标注系统和方法
Zheng et al. Template-independent news extraction based on visual consistency
CN103914478A (zh) 网页训练方法及系统、网页预测方法及系统
Pol et al. A survey on web content mining and extraction of structured and semistructured data
CN103294820B (zh) 基于语义扩展的web页面归类方法和系统
CN108733813A (zh) 面向bbs论坛网页内容的信息提取方法、系统及介质
Omari et al. Cross-supervised synthesis of web-crawlers
Furche et al. Real understanding of real estate forms
Arya et al. Content extraction from news web pages using tag tree
Furche et al. Turn the page: automated traversal of paginated websites
Chavan et al. A methodology for extracting head contents from meaningful tables in web pages
Furche et al. Amber: Automatic supervision for multi-attribute extraction
Chuang et al. Tree-structured template generation for web pages
Lim et al. Generalized and lightweight algorithms for automated web forum content extraction
Kolkur et al. Web Data Extraction Using Tree Structure Algorithms-A Comparison
Mane et al. Template extraction from heterogeneous web pages

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: SHANGHAI HUAYAN PROPERTY DEVELOPMENT CO., LTD.

Free format text: FORMER OWNER: SHANGHAI XIEYU NETWORK TECHNOLOGY CO., LTD.

Effective date: 20110810

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 200434 HONGKOU, SHANGHAI TO: 200052 CHANGNING, SHANGHAI

TA01 Transfer of patent application right

Effective date of registration: 20110810

Address after: 16, Biology Building, No. 1326,, Shanghai, West Yan'an Road

Applicant after: Shanghai Huayan House Development Co., Ltd.

Address before: 200434 Shanghai city Jipu road 375 Lane 34, room 103

Applicant before: Shanghai Xieyu Network Technology Co., Ltd.

C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee

Owner name: SHANGHAI HUAYAN FANGMENG NETWORK TECHNOLOGY CO., L

Free format text: FORMER NAME: SHANGHAI HUAYAN PROPERTY DEVELOPMENT CO., LTD.

CP03 Change of name, title or address

Address after: 200052, Changning District, West Yan'an Road, No. 16, building 1326, Shanghai

Patentee after: Shanghai Huayan real NSFocus network Polytron Technologies Inc

Address before: 16, Biology Building, No. 1326,, Shanghai, West Yan'an Road

Patentee before: Shanghai Huayan House Development Co., Ltd.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130320

Termination date: 20180713