专利名称:一种文章实时智能抓取系统和方法
技术领域:
本发明涉及互联网技术中抓取技术、web挖掘技术、信息抽取技术、自然语言处理技术领域;可以应用于需要大规模精准、实时地抓取文章的门户网站、搜索引擎网站等互联网领域。
背景技术:
本发明专利还具有更多传统抓取系统没有的优点通过同站学习可以自动将网站中非文章页面比如频道页、专题页、列表页、广告页过滤;可以对抓取文章进行近似文档排重;可以对抓取文章进行语义理解,自动分类,自动生成摘要和关键词;可以准确寻找某文章数目50以内的分页序列并对分页内容进行顺序合并;可以对网站抓取范围进行灵活配置。支持抓取网站、频道、任意页面上一个或多个列表区域所属的文章。在实际应用中,本抓取系统转载文章质量很高,可以直接对外发布面向用户,同时自动适应上千个抓取网站的模版变化,极大的减少了抓取需要的人力参与,在大面积改善门户类网站的新闻覆盖度和实时性同时,也降低了门户类网站的人力成本。在所有门户类网站中,本专利都有应用场景,可以有效改善其新闻的覆盖度和实时性,同时降低人力成本。同时新闻类搜索引擎中,本专利也可以应用。信息抽取领域现在有很多技术方案,核心都是如何生成和维护抽取包装器。技术上主要分下面两类I)采用机器自动生成抽取包装器技术的抽取系统可以大量抓取文章,但是无法做到文章的精准抽取,抓取文章的可用性低;2)采用人工生成抽取包装器技术的抽取系统,文章抽取结果精准,但是要对互联网上千个网站进行抽取包装器的生成和更新维护工作,只能依赖大量的人力参与;本发明专利的抽取模块以自主研发的“基于同站学习和自动规则生成的文章自动抽取”方法为核心,很好地解决了上面两个问题。在实际应用中,本技术方案实现了抽取包装器的机器自动生成和维护,使抽取不需要大量的人力参与;同时还实现了文章的精准抽取,抽取结果很少冗余和遗漏,可用性很闻。本发明中涉及一下技术术语,解释如下抽取包装器网页信息抽取是信息抽取中的一类,网页信息抽取的包装器生成技术目前发展成为一个较为独立的领域。包装器是由一系列抽取规则以及应用这些规则的计算机代码组成的,专门从特定信息源中抽取需要的信息并返回结果的程序;基于同站学习和自动规则生成的文章自动抽取方法:本发明包含的一个包装器自动生成方法,可以精准智能的从网页中抽取出文章信息;同站学习桉网站为单位,收集一个网站足够量的网页,一起讲行机器统计学习, 进而从中生成需要的规则;爬虫(或者抓取爬虫):抓取系统中单独指负责网页下载的模块;本系统研发的抽取包装器包括两个库Stvle树或者路径库Style的集合库。Style指的是某个DOM节点在DOM树中进行节点上寻,直到到 body节点,构建出的这样一条路径及其权重信息。在库中,路径都以网站为单位组织,同路径合并成一条,并记录频率作为权重;樽式库此处所谓模式包括I) 一个是方法中分段后每一段的如下特征码模式=md5((内容text/img) + 段落 tag 前向遍历序列+site name) +value其中value是权重信息,也即模式的出现频率。2)还有一个是对这些段进行统计学习后生成的自动正则模式=正则。代理技术代理技术是指代理服务器接收客户请求后会检查验证其合法性,如其合法,代理服务器像一台客户机一样取回所需的信息再转发给客户;实时抓取强调抓取的时效性的一种抓取技术。目标是抓取源站更新内容后能够实时抓取到。
发明内容
本发明较好的解决了上述问题。根据本发明的文章实时智能抓取系统,包括实时抓取模块、网页抽取系统、文档近似排重模块、文档自动分类模块和文章发布模块。其中所述实时抓取模块包括线上和线下两个子模块。线上运行子模块如下任务提取模块,从任务(job)集合中轮流提取一个job ;任务解析模块,对每一个任务(job)进行解析,解析结果将会形成一些属性和规则;任务抓取时间范围检验模块,查询任务的时间范围参数,如果时间范围不包含当前时间,将不抓取,跳过本job,否则,进行抓取时间间隔检验;任务抓取时间间隔检验模块,查询任务的抓取时间间隔,如果时间间隔指定下一次抓取时间大于当前,则将不抓取,跳过本job,否则,进行任务抓取;任务调度模块,根据任务解析模块的job其它属性进行job调度,调度时候会判断,如果这个job以往已经存在,则不分发,仍然采用本地服务器来抓取;否则,选择服务器群中现jobs数目较少的一台服务器,以实现抓取任务的均衡,从而优化总体的抓取速度; 同时考虑尽量避免一台服务器上同网站job太多,以防止单台服务器对单个网站抓取压力太大;任务下载模块,进行任务的具体下载,去代理库中取适当数目的代理,一般是5 个;如果没有代理可取,则采用非代理抓取;同时将无代理和上述5个代理合并,形成代理集合;根据解析得到的任务参数,从代理集合中随机选择一个代理,进行任务的本轮下载;任务抓取频率调整模块,根据job的抓取间隔基数,如果本轮抓取发现更新,则随机减少下一轮次抓取时间间隔;如果没有发现更新,则随机放大下一轮次的抓取间隔;但是保证时间间隔是job的抓取间隔基数的[O. 5,2]倍数范围内;所述实时抓取模块还包括如下线下运行子模块任务抓取时间范围发现模块,执行历史抓取日志智能分析工作,从中分析出每一个任务(job)的时间范围;任务抓取时间间隔发现模块,读入昨天的抓取日志,分析每一个job的一天所有轮次的抓取情况,从中分析出每一个job的更新情况;如果发现job的当前间隔基数保证了 50%以上轮次可以抓取到更新,则不调整;否则适当放大当前间隔基数,以降低无谓抓取请求;免费代理收集和验证模块,从互联网免费代理分享网站下载当天的免费代理集合,对这些免费代理进行验证;随机选择历史抓取链接形成验证url集合,使用每一个代理来执行若干次的url抓取,剔除掉不能成功抓取或者抓取速度太慢的代理,留下成功率高同时速度快的代理,形成当天的代理库,以为线上抓取提供代理支持。本发明所述的网页抽取系统,也即文章类型网页智能抽取系统,包括(I)待抽取网页载入模块,定时查询本地索引,发现新索引就按照索引将网页载入系统内存中;(2)包装器查询模块,对所有待抽取的网页,查询具体抽取包装器信息,如果查询到,就按照抽取包装器,进入抽取模块,进行具体抽取,否则,将网页标记为抽取失败;(3)网页抽取模块,从网页中抽取出具体文章信息,借助已有的抽取包装器;(4)抽取失败网页收集模块,将本轮抽取失败的网页收集起来,按网站分类,以方便进行集中学习;(5)学习判断模块,按同网站查询抽取失败网页集合,根据每一网站的失败网页数量,计算此网站本轮抽取成功失败比例,决定是否进入网页学习模块;(6)网页学习模块,对所有失败网页进行机器学习,最后生成新的抽取包装器;(7)抽取包装器管理模块,对系统的抽取包装器进行管理,也即对路径库和模式库进行管理,,并提供包装器使用接口给网页抽取模块,提供包装器更新接口给网页学习模块。所述网页抽取模块还包括HTML解析模块,对传入网页,解析html构建DOM树;正文域寻找模块,根据包装器信息,寻找正文域;文章头和分页信息提取模块,用于提取文章头信息和文章分页信息;正文域修正模块,用于修正正文域;正文域分块模块,用于对正文域分块,同时进行分块属性判定和冗余分块去除;分段过滤模块,用于对正文域进行分段,同时逐段过滤;
数据整理模块,用于合并和整理信息,生成最后文章类型的结果。所述网页学习模块还包括HTML解析模块,对传入网页,解析html构建DOM树;正文域寻找模块,用于寻找正文域;路径库更新模块,用于入库合并,同时对路径库进行整理;文章头和分页信息提取模块,用于提取文章头信息和文章分页信息;正文域修正模块,用于修正正文域;正文域分块模块,用于对正文域分块,同时进行分块属性判定和冗余分块去除;分段学习模块,进行正文域分段,逐段构建模式,入模式库合并;模式归纳模块,对所有模式进行归纳,生成规则,入模式库合并;包装器整理模块,对系统包装器进行整理,去除已经无效的信息。所述正文域分块模块,还包括频繁模式识别模块,采用MDR方法来识别频繁模式;分块模块,对得到的频繁模式,进行分块标题寻找、分块父节点上寻,以得到最合适的分块节点组合,然后组合形成分块;分块标记模块,在正文域DOM树中对所有识别出来的分块进行标记。本发明还提供了一种文章实时智能抓取方法,所述方法包括实时抓取步骤、网页抽取步骤、文档近似排重步骤、文章自动分类步骤和文章发布步骤。所述实时抓取步骤包括线上和线下运行子步骤,其中所述线上运行子步骤包括步骤I,从任务(job)集合中轮流提取一个job ;步骤2,job解析,对每一个job进行解析,解析结果将会形成一些属性和规则;步骤3,时间范围判定,查询任务的时间范围参数,如果时间范围不包含当前时间, 将不抓取,返回步骤1,否则进入下一步骤;步骤4,时间间隔判定,查询任务的抓取时间间隔,如果时间间隔指定下一次抓取时间大于当前,则将不抓取,返回步骤1,否则进入下一步骤;步骤5,job调度,根据任务解析模块的job其它属性进行job调度,调度时候会判断,如果这个job以往已经存在,则不分发,仍然采用本地服务器来抓取;否则,选择服务器群中现jobs数目较少的一台服务器,以实现抓取任务的均衡,从而优化总体的抓取速度; 同时考虑尽量避免一台服务器上同网站job太多,以防止单台服务器对单个网站抓取压力太大;步骤6,任务下载,去代理库中取适当数目的代理,一般是5个;如果没有代理可取,则采用非代理抓取;同时将无代理和上述5个代理合并,形成代理集合;根据解析得到的任务参数,从代理集合中随机选择一个代理,进行任务的本轮下载;步骤7,抓取频率调整,根据job的抓取间隔基数,如果本轮抓取发现更新,则随机减少下一轮次抓取时间间隔;如果没有发现更新,则随机放大下一轮次的抓取间隔;但是保证时间间隔是job的抓取间隔基数的
倍数范围内;频率调整完成后,返回步骤 I,重复执行整个流程;所述实时抓取步骤还包括如下线下运行子步骤
步骤1,分析日志发现时间范围,执行历史抓取日志智能分析工作,从中分析出每一个任务(job)的时间范围;步骤2,分析日志发现新时间间隔,读入昨天的抓取日志,分析每一个job的一天所有轮次的抓取情况,从中分析出每一个job的更新情况;如果发现job的当前间隔基数保证了 50%以上轮次可以抓取到更新,则不调整;否则适当放大当前间隔基数,以降低无谓抓取请求;步骤3,免费代理搜集和验证,从互联网免费代理分享网站下载当天的免费代理集合,对这些免费代理进行验证;随机选择历史抓取链接形成验证url集合,使用每一个代理来执行若干次的url抓取,剔除掉不能成功抓取或者抓取速度太慢的代理,留下成功率高同时速度快的代理,形成当天的代理库,以为线上抓取提供代理支持。所述网页抽取步骤,还说明了一种文章类型网页智能抽取方法,包括如下步骤步骤1,待抽取网页载入。每隔一段时间就载入所有待抽取的网页集合;如果没有待抽取网页,直接进入步骤6;步骤2,包装器查询。对所有待抽取的网页,查询具体抽取包装器信息,如果查询到,就进入步骤4,进行具体抽取;否则,抽取失败,进入步骤5 ;步骤3,网页抽取。按照包装器,对网页进行具体抽取,抽取结束后将抽取结果组织成文章类型;步骤4,标记抽取失败。将抽取失败网页标记,以方便步骤6收集,同时转步骤2 ;步骤5,收集所有抽取失败网页,形成抽取失败网页集合;步骤6,学习判断。按同网站查询抽取失败网页集合,对每一网站的失败网页集合, 判断此网站本轮抽取成功失败比例,决定是否进行机器学习;如果学习,加入待学习网页集合;步骤7,网页学习。对每一个网站的所有失败网页进行学习,生成新的抽取包装器;步骤8,抽取包装器管理。将新的抽取包装器放入包装器集合中;步骤9,结束。文章类型网页智能抽取方法核心环节是抽取环节、学习环节。抽取环节,即,上述步骤3,包括如下步骤步骤3. I,HTML解析。对传入网页,解析html构建DOM树;先对html做预处理,包括字符格式转换,script/style内容过滤,不可视字符剔除等;然后根据html代码及html规范,采用HtmlParser组件来解析网页并得到DOM树;步骤3. 2,寻找正文域;在抽取包装器的style树中查询此网站的定位路径,提取出正文域路径,然后按照路径,在DOM树中遍历,定位到具体DOM节点,这个节点就是我们要找的正文域;步骤3. 3,提取文章头信息和文章分页信息;文章头信息,主要是文章标题信息的提取步骤包括(I)提取正文域内开头的若干行,分别计算这些行的标题匹配度并提取最大,得到域内的候选标题行;此处“行”是指根据html的换行标签比如<br>、〈P〉等对整个网页的 DOM树进行分割后形成的一些相邻dom节点集合,以及其对应的html代码;
(2)正文域前边的若干行,分别计算这些行的标题匹配度并提取最大,得到域前的候选标题行;(3)然后,根据启发规则及标题匹配度比较,从中选择一个做标题;标题匹配度的衡量公式如下Pt = a* (l-lenpunc/lenall) +b* (l-lentitle/lenmax title) +c* (l-lenkeywords/lenmax_ keywords)+d* (I _1 ensummery/1 θπ·—summery) +e* (I enauthortext/1 enmaxauthortext) +f*WH+g*Hlen其中Ienpunc是行中标点符号长度;Ienall是行中所有文字长度;Ientitle是行内容和网页中title字段内容的编辑距离;Ienmax title是行内容和网页中title字段内容中的最大值;Keywords指的是网页自带的关键词信息;summery指的是网页自带的摘要字段; authortext指的是网页url对应的锚文字;这三种类型变量意义和上述类似;WH是标签类型加权,行所属的所有节点中出现hi h2. .. center等标签,会给节点加权;Hlen是节点内容长度加权,在大量统计后发现,标题长度在16-23间最常见,其它区间都有各自的分布概率,以此计算出节点的长度加权;a,b,c,d,e,f,g是各个因素的影响因子,在应用中可以修正。文章分页信息,其识别方法是,在正文域的尾部寻找若干行,逐行进行数字序列发现;如果发现了连续的数字序列,比如“ 1,2,3,4,5,6... ”等,而且这些数字本身带有的url 链接信息和本网页属于一个网站,则识别成功。步骤3. 4,修正正文域;借助于新闻文章格式的提示帮助,结合上面步骤的文章头信息,文章尾信息(分页信息),可以修正正文域,使其更加尽量精确I)在域前寻找到文章头(标题、时间等)后,对正文域修正文章头在域内,剪去文章头以前信息;文章头在域外,合并之间部分入正文域;2)在域尾寻找到文章尾信息后(分页等)如果文章尾在域内,则剪去域中尾后部分;如果文章尾在域外,不修正。步骤3. 5,对正文域分块;包括分块、分块属性判定及冗余分块去除两个步骤;其中分块的步骤如下步骤3. 5. 1,采用MDR方法来识别频繁模式(这个方法是Bing Iiu提出的);步骤3. 5. 2,对得到的模式,进行分块标题寻找、分块等父节点上寻,以得到最合适的分块节点组合;然后组合形成分块;步骤3. 5. 3,在正文域DOM树中对所有识别出来的分块进行标记;同时,在构建分块树时依据以下准则(I)同父所有子节点中,标记出的分块之间节点也是一个分块,第一个分块之前的节点是一个分块,最后边分块之后节点是一个分块;
(2)如果节点子树中存在标记出的分块,则节点本身也是一个分块;其中正文域分块之分块属性判定和冗余分块去除;具体去除方法是(I)在得到的分块中,判定其链接文字和总体文字数目比。(2)如果分块的链接比大于阈值(O. 5f),则认为是几余分块,树中去除,用hr标签替代;(3)对剩余的频繁模式识别出的分块,由于它们明确的语义信息,将为它们做好标记,使它们在后续操作中不再拆分(比如一个电视节目表格);步骤3. 6,正文域分段过滤;对正文域分块树进行分段,从而得到正文分段序列。之所以要分段,是因为经过一些观察后发现,冗余信息都是以段或多段的形式出现的,所以为了后续动作中去除冗余信息的方便,对正文域进行了段化。然后进行正文域分段之逐段过滤;(I)生成模式。对所有段,提取其html代码,进行html片段简化,只留下tag名称和内容,取md5 key,构建成模式;模式表达如下模式=md5((内容text/img) + 段落 tag 前向遍历序列+site name) +value其中value是权重信息,也即模式的出现频率;(2)逐段过滤。将得到的模式放入包装器的模式库,进行入库合并;模式库查询到相同模式,则模式加权,也即将value字段合并加权;如果没有查找到,则入库。步骤3. 7,数据整理,结果生成;合并整理信息,抽取摘要等,抽取成功;步骤3. 8,抽取结束。在学习环节,SP,上述步骤7,包括步骤7. I,HMTL解析。对传入网页,解析html构建DOM树;步骤7. 2,寻找正文域;通过正文域识别方法来定位正文域。定位正文域的目的是初步寻找正文的合理区域,减少方法处理的Dom树范围,同时减少了方法的出错概率;正文包含在一个或多个嵌套的Div、Table节点中,正文定域就是寻找最合适的这样一个Div或Table ;通过一个信息度最高的Div或Table来实现;信息度计算公式H = lennotlink*log (l+lenlink/lenallTxt) +a*lennotlink*log (l+lennotlink/lenhtml)其中a是影响因子,目前默认为0. 5 ;Ienffijt link是节点中非连接文字长度;Ienamxt是节点中所有文字长度;Ienhtml是节点的html长度;计算时,log中参数加I,使log运算结果都〉O ;找到这个想要的Div或者Table后,在DOM树中回溯到body节点,回溯结束后,就形成了一条路径;回溯过程中,记录经过DOM节点的位置信息,也即每一个DOM节点在父节点中的从左到右的序号。
16
最后,得到一条DOM树路径,同时路径的节点还有其位置信息步骤7. 3,路径入库合并;将上述路径并入系统包装器之路径库,并入时,同路径合并加权;如果发现重复的路径,进行合并加权,加权是修改DFS字段,也即将新路径的DFS 值加入旧路径;如果没有发现重复,新路径入库就可以了 ;步骤7. 4,提取文章头信息和文章分页信息;包括文章头信息,主要是标题信息的提取方法是(I)提取正文域内开头的若干行,分别计算这些行的标题匹配度并提取最大,得到域内的候选标题行;(2)正文域前边的若干行,分别计算这些行的标题匹配度并提取最大,得到域前的候选标题行;(3)然后,根据启发规则及标题匹配度比较,从中选择一个做标题;标题匹配度的衡量公式如下Pt = a* (l-lenpunc/lenall) +b* (l-lentitle/lenmax title) +c* (l-lenkeywords/lenmax_ keywords)+d* (I _1 ensummery/1 θπ·—summery) +e* (I enauthortext/1 enmaxauthortext) +f*WH+g*Hlen其中I enpunc是行中标点符号长度;Ienall是行中所有文字长度;Ientitle是行内容和网页中title字段内容的编辑距离;Ienmax title是行内容和网页中title字段内容中的最大值;Keywords指的是网页自带的关键词信息;summery指的是网页自带的摘要字段; authortext指的是网页url对应的锚文字;这三种类型变量意义和上述类似;WH是标签类型加权,行所属的所有节点中出现hlh2. . . center等标签,会给节点加权;Hlm是节点内容长度加权,在大量统计后发现,标题长度在16-23间最常见,其它区间都有各自的分布概率,以此计算出节点的长度加权;a,b,c,d,e,f,g是各个因素的影响因子,在应用中可以修正。文章分页信息识别方法是,在正文域的尾部寻找若干行,逐行进行数字序列发现; 如果发现了连续的数字序列,比如“ 1,2,3,4,5,6... ”等,而且这些数字本身带有的url链接信息和本网页属于一个网站,则识别成功;步骤7. 5,修正正文域;借助于新闻文章格式的提示帮助,结合上面步骤的文章头信息,文章尾信息(分页信息),可以修正正文域,使其更加尽量精确I)在域前寻找到文章头(标题、时间等)后,对正文域修正文章头在域内,剪去文章头以前信息;文章头在域外,合并之间部分入正文域;2)在域尾寻找到文章尾信息后(分页等)如果文章尾在域内,则剪去域中尾后部分;
如果文章尾在域外,不修正。步骤7. 6,对正文域分块,包括分块、分块属性判定以及冗余分块去除两个大的步骤;其中分块的具体步骤如下步骤7. 6. 1,采用MDR方法来识别频繁模式(这个方法是Bing Iiu提出的);步骤7. 6. 2,对得到的频繁模式,进行分块标题寻找、分块等父节点上寻,以得到最合适的分块节点组合;然后组合形成分块;步骤7. 6. 3,在正文域DOM树中对所有识别出来的分块进行标记;同时,在构建分块树时依据以下准则(I)同父所有子节点中,标记出的分块之间节点也是一个分块,第一个分块之前的节点是一个分块,最后边分块之后节点是一个分块;(2)如果节点子树中存在标记出的分块,则节点本身也是一个分块;其中分块属性判定和冗余分块去除的方法如下(I)在得到的分块中,判定其链接文字和总体文字数目比。(2)如果分块的链接比大于阈值(O. 5f),则认为是几余分块,树中去除,用hr标签替代;(3)对剩余的频繁模式识别出的分块,由于它们明确的语义信息,将为它们做好标记,使它们在后续操作中不再拆分(比如一个电视节目表格);步骤7. 7,分段学习,包括正文域分段、逐个模式学习两个大的步骤;先进行正文域分段对正文域分块树进行分段,从而得到正文分段序列。之所以要分段,是因为经过一些观察后发现,冗余信息都是以段或多段的形式出现的,所以为了后续动作中去除冗余信息的方便,对正文域进行了段化。在分完段后,所有段,生成模式; 模式生成过程是,对所有段,提取其html代码,进行html片段简化,只留下tag名称和内容,取md5 key,构建成模式;模式表达如下模式=md5((内容text/img) + 段落 tag 前向遍历序列+site name) +value其中value是权重信息,也即模式的出现次数。然后进行逐个模式的学习。学习方式是将得到的模式放入包装器的模式库,进行入库合并。模式库查询到相同模式,则模式加权,也即将value字段合并加权;如果没有查找到,则入库就可以了 ;步骤7. 8,模式归纳,也即自动正则生成;模式归纳的具体步骤如下步骤7. 8. I :对库中所有樽式,提取原串,桉网站分组,每组桉字符串相似度讲行聚类,得到高内聚的几个分组;步骤7. 8. 2 :对得到每个分组,其内,对每对分段计算其合并后的正则,得到所有可能的不同正则;这些正则的出现频率按高低排序,取最大的那个;再验证第二大的那个, 如果能够覆盖组内部分未覆盖分段且权重适当,则其也是可取的模式;
提取两个分段的模式递归地寻找两个分段剩余部分最优共同片段;片段前部分就是不同,需要合并的地方;这总体是一个借助二维表格动态规划的方法;步骤7. 8. 3 :对得到的所有正则,保留那些权重高于某个阈值项的,然后加入模式库中;模式归纳结束后,得到若干条正则;加入权重value信息,入模式库中;步骤7. 9,结束。上述所有学习环节最后都更新了两个库style树库(路径库)、模式库;将更新后的这两个库整理入总体包装器库,完成了所有学习步骤。本发明专利还具有更多传统抓取系统没有的优点I)通过同站学习可以自动将网站中非文章页面比如频道页、专题页、列表页、广告页过滤;2)可以对抓取文章进行近似文档排重;3)可以对抓取文章进行语义理解,自动分类,自动生成摘要和关键词;4)可以准确寻找某文章数目50以内的分页序列并对分页内容进行顺序合并;5)可以对网站抓取范围进行灵活配置。支持抓取网站、频道、任意页面上一个或多个列表区域所属的文章;在实际应用中,本抓取系统文章抓取质量很高,可以直接对外发布面向用户,同时自动适应上千个抓取网站的模版变化,极大的减少了抓取需要的人力参与,在大面积改善门户类网站的新闻覆盖度和实时性同时,也降低了门户类网站的人力成本。在所有门户类网站中,本专利都有应用场景,可以有效改善其新闻的覆盖度和实时性,同时降低人力成本。
同时新闻类搜索引擎中,本专利也可以应用。
图I为本系统模块结构图2为本系统数据流程图3为实时抓取模块的线上模块结构图4为实时抓取模块的线下模块结构图5实时抓取模块的线上运行流程图6实时抓取模块的线下运行流程图7本发明的文章类型网页智能抽取系统模块结构图8网页抽取模块的模块结构图9网页学习模块的模块结构图10正文域分块模块的模块结构图11基于同站学习和自动规则生成的文章自动抽取方法的总体流程图12基于同站学习和自动规则生成的文章自动抽取方法的总体流程图13基于同站学习和自动规则生成的文章自动抽取方法的学习环节流程图14正文域分块模块的数据流程图15抽取方法之正文域修正示意图16-19是系统的总体工作案例以及实时抓取模块案例的附图;图20-28是系统的网页抽取模块之基于凤凰网的网页抽取工作案例。
具体实施例方式本发明的抓取系统共由5个模块或者子系统构成,如图I所示。包括实时抓取模块,网页抽取系统,文档近似排重模块,文档自动分类模块,文章发布模块。系统总体数据流程如图2所示,具体步骤如下步骤1,提交一个job或者一堆jobs给系统的实时抓取模块;实时抓取模块又可以主要分成jobs解析调度模块和爬虫下载模块(任务下载模块)两个主要步骤;步骤2,实时抓取模块之jobs解析调度模块负责将每一个job解释成本系统规定的若干个规则,这些规则指定了下一步爬虫模块的具体抓取逻辑;同时,jobs解析调度模块还负责将每一个job调度分发到合适的某一台服务器上,以实现job的更快抓取和抽取, 同时将维护总体服务器群的均衡;步骤3,实时抓取之任务下载(爬虫下载)模块接受到每一个job的规则,按照这些规则指定的爬行逻辑,进行抓取;抓取结束后将在本地服务器上存档抓取网页结果同时索引这些结果以方便抽取模块按网站为单位载入这些网页结果;步骤4,网页抽取系统定时查询本地抓取索引,发现新索引就通过索引将步骤3下载的所有网页按网站为单位载入系统,按照本发明包含的“基于同站学习和自动规则生成的文章自动抽取算法”进行具体抽取;抽取时如果抽取不成功将按网站为单位进行自动学习,从而自动生成抽取包装器,实现下一次的成功抓取;抽取还包括自动摘要模块、自动关键词生成模块,以生成抽取出文章的摘要、关键词信息;步骤5,文档近似排重模块是服务器部署。步骤4抽取出的所有文章将通过网络传入文档近似排重服务器,进行文档近似排重;如果发现近似,将把文章丢弃;否则传入文档自动分类模块;步骤6,文档自动分类模块也是服务器部署。步骤5排重后的文章集合将传入分类服务器,根据自动分类算法对文章进行自动分类,根据分类结果,指定每一篇文章的分类属性比如军事、历史等,同时还将剔除掉广告、色情等不良文章;分完类后的所有文章将在本地服务器上存档,同时建索引以方便下一步发布模块读取;步骤7,文章发布模块定时查询本地索引,发现新索引就将通过索引将文章载入系统,通过网络发布到具体内容系统。根据本发明的文章实时智能抓取系统,包括实时抓取模块、网页抽取系统、文档近似排重模块、文档自动分类模块和文章发布模块。其中,实时抓取模块的详细技术方案在要求高实时性抓取的时候,希望能够在1-3分钟内将对方网站更新内容抓取到,这需要对抓取网站服务器频繁的发起链接和下载请求,实际抓取中,这将导致对方服务器压力过大进而采取封禁策略,从而使我们抓取不稳定甚至失败。同时高实时的抓取需求,极其耗费网络等硬件资源,导致成本上升。现有很多抓取系统通过采用抓取频率控制、增加抓取服务器的方式来解决上述问题,保障抓取的实时性、安全性。
本发明专利的实时抓取模块通过综合采用任务(jobs)合理调度、任务抓取间隔动态自适应方法、任务每天抓取时间范围自动发现方法、自动代理收集和验证方法等技术, 实现了不同的实时抓取方案。和其它实时抓取技术相比,本方案成本更低、结构也更简单。本实时抓取模块分线上和线下的两个模块。包括线上运行的7个模块任务提取模块、任务解析模块、任务抓取时间范围检验模块、任务抓取时间间隔检验模块、任务调度模块、任务下载模块、任务抓取频率调整模块; 还包括线下运行的3个模块任务抓取时间范围发现模块、任务抓取时间间隔发现模块、免费代理收集和验证模块。任务提取模块,从任务(job)集合中轮流提取一个job ;任务解析模块,对每一个任务(job)进行解析,解析结果将会形成一些属性和规则;任务抓取时间范围检验模块,查询任务的时间范围参数,如果时间范围不包含当前时间,将不抓取,跳过本job,否则,进行抓取时间间隔检验;任务抓取时间间隔检验模块,查询任务的抓取时间间隔,如果时间间隔指定下一次抓取时间大于当前,则将不抓取,跳过本job,否则,进行任务抓取;任务调度模块,根据任务解析模块的job其它属性进行job调度,调度时候会判断,如果这个job以往已经存在,则不分发,仍然采用本地服务器来抓取;否则,选择服务器群中现jobs数目较少的一台服务器,以实现抓取任务的均衡,从而优化总体的抓取速度; 同时考虑尽量避免一台服务器上同网站job太多,以防止单台服务器对单个网站抓取压力太大;任务下载模块,进行任务的具体下载,去代理库中取适当数目的代理,一般是5 个;如果没有代理可取,则采用非代理抓取;同时将无代理和上述5个代理合并,形成代理集合;根据解析得到的任务参数,从代理集合中随机选择一个代理,进行任务的本轮下载; 任务下载采用了传统的网页下载引擎;任务抓取频率调整模块,根据job的抓取间隔基数,如果本轮抓取发现更新,则随机减少下一轮次抓取时间间隔;如果没有发现更新,则随机放大下一轮次的抓取间隔;但是保证时间间隔是job的抓取间隔基数的
倍数范围内;所述实时抓取模块还包括如下线下运行子模块任务抓取时间范围发现模块,执行历史抓取日志智能分析工作,从中分析出每一个任务(job)的时间范围;任务抓取时间间隔发现模块,读入昨天的抓取日志,分析每一个job的一天所有轮次的抓取情况,从中分析出每一个job的更新情况;如果发现job的当前间隔基数保证了 50%以上轮次可以抓取到更新,则不调整;否则适当放大当前间隔基数,以降低无谓抓取请求;免费代理收集和验证模块,从互联网免费代理分享网站下载当天的免费代理集合,对这些免费代理进行验证;随机选择历史抓取链接形成验证url集合,使用每一个代理来执行若干次的url抓取,剔除掉不能成功抓取或者抓取速度太慢的代理,留下成功率高同时速度快的代理,形成当天的代理库,以为线上抓取提供代理支持。在最理想的情况下,我们可以用5-10个代理来下载一个网站,与传统抓取引擎相比,这将大大降低单个抓取服务器的IP出现频率,一方面使我们的抓取网络质量有小幅度改善,另一方面使我们的单台服务器抓取被封禁风险大大降低。线上模块执行了每一个任务的抓取,只要当前有抓取任务,就执行;线下模块只是为线上模块的运行提供数据和资源支持,比如一个更新的代理库等,线下模块将在每天空闲时间运行一次。由于运行比较耗时,所以放入线下,以不影响线上模块运行。本实时抓取模块的线上运行流程如下(图5):步骤1,从任务(job)集合中轮流提取一个job ;步骤2,job解析,对每一个job进行解析,解析结果将会形成一些属性和规则;步骤3,时间范围判定,查询任务的时间范围参数,如果时间范围不包含当前时间, 将不抓取,返回步骤1,否则进入下一步骤;步骤4,时间间隔判定,查询任务的抓取时间间隔,如果时间间隔指定下一次抓取时间大于当前,则将不抓取,返回步骤1,否则进入下一步骤;步骤5,job调度,根据任务解析模块的job其它属性进行job调度,调度时候会判断,如果这个job以往已经存在,则不分发,仍然采用本地服务器来抓取;否则,选择服务器群中现jobs数目较少的一台服务器,以实现抓取任务的均衡,从而优化总体的抓取速度; 同时考虑尽量避免一台服务器上同网站job太多,以防止单台服务器对单个网站抓取压力太大;步骤6,任务下载,去代理库中取适当数目的代理,一般是5个;如果没有代理可取,则采用非代理抓取;同时将无代理和上述5个代理合并,形成代理集合;根据解析得到的任务参数,从代理集合中随机选择一个代理,进行任务的本轮下载;步骤7,抓取频率调整,根据job的抓取间隔基数,如果本轮抓取发现更新,则随机减少下一轮次抓取时间间隔,一般是减少0. 2倍;如果没有发现更新,则随机放大下一轮次的抓取间隔,一般是0. 2倍;最后要保证下一轮次的抓取时间间隔是job的抓取间隔基数的
倍数范围内;频率调整完成后,返回步骤1,重复执行整个流程;本抓取系统的线下流程包括抓取时间范围发现,抓取时间间隔发现,代理收集和验证,这些步骤为上面线上抓取流程的工作提供了知识,比如job的时间范围、有效的代理等;这一部分在线下运行,一般是抓取比较空闲的0-6点时间,一次结束。其具体步骤如下(图6):步骤1,分析日志发现新时间范围,执行历史抓取日志智能分析工作,从中分析出每一个任务(job)的时间范围;我们的方法是取最近7天的抓取日志,分析出每一天的第一次抓取到时间,每一天的最后一次抓取到时间;然后取7天的最小第一次抓取到时间,7天的最大最后一次抓取到时间,作为新的时间范围;步骤2,分析日志发现新时间间隔,读入昨天的抓取日志,分析每一个job的一天所有轮次的抓取情况,从中分析出每一个job的更新情况;如果发现job的当前间隔基数保证了 50%以上轮次可以抓取到更新,则不调整;否则适当放大当前间隔基数,以降低无谓抓取请求;步骤3,免费代理搜集和验证,从互联网免费代理分享网站下载当天的免费代理集合,对这些免费代理进行验证;验证方法是根据抓取历史记录,随机提取代理数目3倍的可抓取url ;然后对这些代理的每一个,随机分配3个url供其抓取,成功一个将给加I分的奖励,失败一个将给减 I分的惩罚;5秒内抓取成功将给与加5分的奖励,10秒内抓取到将给与加2分的奖励;验证完成后,根据这些代理的得分,一般去除掉得分在2分以下的代理,从而剔除掉不能成功抓取或者抓取速度太慢的代理,留下成功率高同时速度快的代理,形成当天的代理库,以为线上抓取提供代理支持。本发明的网页抽取系统,也即文章类型网页智能抽取系统,其详细技术方案信息抽取领域现在有很多技术方案,核心都是如何生成和维护抽取包装器。技术上主要分下面两类I)采用机器自动生成抽取包装器技术的抽取系统可以大量抓取文章,但是无法做到文章的精准抽取,抓取文章的可用性低;2)采用人工生成抽取包装器技术的抽取系统,文章抽取结果精准,但是要对互联网上千个网站进行抽取包装器的生成和更新维护工作,只能依赖大量的人力参与;本发明专利的抽取模块以自主研发的“基于同站学习和自动规则生成的文章自动抽取”方法为核心,很好地解决了上面两个问题。在实际应用中,本技术方案实现了抽取包装器的机器自动生成和维护,使抽取不需要大量的人力参与;同时还实现了文章的精准抽取,抽取结果很少冗余和遗漏,可用性很闻。本发明的文章类型网页智能抽取系统主要包括如下几个子模块,如图3 (I)待抽取网页载入模块,主要负责定时查询本地索引,发现新索引就按照索引将网页载入系统内存中;(2)包装器查询模块,对所有待抽取的网页,查询具体抽取包装器信息,如果查询到,就按照抽取包装器,进入抽取模块,进行具体抽取,否则,将网页标记为抽取失败;(3)网页抽取模块,负责从网页中抽取出具体文章信息。借助已有的抽取包装器;(4)抽取失败网页收集模块,负责将本轮抽取失败的网页收集起来,按网站分类, 以方便进行集中学习;(5)学习判断模块,按同网站查询抽取失败网页集合,根据每一网站的失败网页数量,计算此网站本轮抽取成功失败比例,决定是否进入网页学习模块;(6)网页学习模块,负责对所有失败网页进行机器学习;最后生成新的抽取包装器;(7)抽取包装器管理模块,负责对系统的抽取包装器进行管理,也即对路径库和模式库进行管理,,并提供包装器使用接口给网页抽取模块,提供包装器更新接口给网页学习模块。所述网页抽取模块还包括HTML解析模块,对传入网页,解析html构建DOM树;正文域寻找模块,根据包装器信息,寻找正文域;文章头和分页信息提取模块,用于提取文章头信息和文章分页信息;正文域修正模块,用于修正正文域;正文域分块模块,用于对正文域分块,同时进行分块属性判定和冗余分块去除;分段过滤模块,用于对正文域进行分段,同时逐段过滤;数据整理模块,用于合并和整理信息,形成文章类型结果;数据整理模块,用于生成最后文章信息。所述网页学习模块还包括HTML解析模块,对传入网页,解析html构建DOM树;正文域寻找模块,用于寻找正文域;路径库更新模块,用于入库合并,同时对路径库进行整理;文章头和分页信息提取模块,用于提取文章头信息和文章分页信息;正文域修正模块,用于修正正文域;正文域分块模块,用于对正文域分块,同时进行分块属性判定和冗余分块去除;分段学习模块,进行正文域分段,逐段构建模式,入模式库合并;模式归纳模块,对所有模式进行归纳,生成规则,入模式库合并;包装器整理模块,对系统包装器进行整理,去除已经无效的信息。所述正文域分块模块,还包括 频繁模式识别模块,采用MDR方法来识别频繁模式;分块模块,对得到的频繁模式,进行分块标题寻找、分块父节点上寻,以得到最合适的分块节点组合,然后组合形成分块;分块标记模块,在正文域DOM树中对所有识别出来的分块进行标记。文章类型网页智能抽取系统的核心是“基于同站学习和自动规则生成的文章自动抽取”方法。这个方法主要包括两个部分抽取环节、学习环节。其总体流程图如图7所示,具体步骤是步骤1,待抽取网页载入。每隔一段时间就载入所有待抽取的网页集合;如果没有待抽取网页,进入步骤6 ;步骤2,包装器查询。对所有待抽取的网页,查询具体抽取包装器信息,如果查询到,就进入步骤4,进行具体抽取;否则,抽取失败,进入步骤5 ;步骤3,网页抽取。按照包装器,对网页进行具体抽取,抽取结束后将抽取结果组织成文章类型;步骤4,标记抽取失败。将抽取失败网页标记,以方便步骤6收集,同时转步骤2 ;步骤5,收集所有抽取失败网页,形成抽取失败网页集合;步骤6,学习判断。按同网站查询抽取失败网页集合,对每一网站的失败网页集合, 判断此网站本轮抽取成功失败比例,决定是否进行机器学习;如果学习,加入待学习网页集合;步骤7,网页学习。对每一个网站的所有失败网页进行学习,生成新的抽取包装器;步骤8,抽取包装器管理。将新的抽取包装器放入包装器集合中;步骤9,本轮抽取结束。抽取方法核心环节是抽取环节、学习环节。下面逐一进行具体介绍。
24
抽取环节,即,上述步骤3,流程如图8所示步骤3. I,HTML解析。对传入网页,解析html构建DOM树;先对html做预处理,包括字符格式转换,script/style内容过滤,不可视字符剔除等;然后根据html代码及html规范,采用HtmlParser组件来解析网页并得到DOM树;步骤3. 2,寻找正文域;正文域指的是DOM树中的某个DOM节点,它包含了文章的主要内容信息。寻找方式是,在抽取包装器的style树中查询此网站的定位路径,提取出正文域路径,然后按照路径,在DOM树中遍历,定位到具体DOM节点,这个节点就是我们要找的正文域;步骤3. 3,提取文章头信息和文章分页信息;文章头信息包括文章标题信息,文章时间信息,文章出处信息等。提取标题的方法大致如下(I)提取正文域内开头的若干行,分别计算这些行的标题匹配度并提取最大,得到域内的候选标题行;此处“行”是指根据html的换行标签比如<br>、〈P〉等对整个网页的 DOM树进行分割后形成的一些相邻dom节点集合,以及其对应的html代码;(2)正文域前边的若干行,分别计算这些行的标题匹配度并提取最大,得到域前的候选标题行;(3)然后,根据启发规则及标题匹配度比较,从中选择一个做标题;标题匹配度的衡量公式如下Pt = a* (l-lenpunc/lenall) +b* (l-lentitle/lenmax title) +c* (l-lenkeywords/lenmax_ keywords)+d* (I _1 ensummery/1 θπ·—summery) +e* (I enauthortext/1 enmaxauthortext) +f*WH+g*Hlen其中I enpunc是行中标点符号长度;Ienall是行中所有文字长度;Ientitle是行内容和网页中title字段内容的编辑距离;Ienmax title是行内容和网页中title字段内容中的最大值;Keywords指的是网页自带的关键词信息;summery指的是网页自带的摘要字段; authortext指的是网页url对应的锚文字;这三种类型变量意义和上述类似;WH是标签类型加权,行所属的所有节点中出现hlh2. . . center等标签,会给节点加权;Hlen是节点内容长度加权,在大量统计后发现,标题长度在16-23间最常见,其它区间都有各自的分布概率,以此计算出节点的长度加权;a,b,c,d,e,f,g是各个因素的影响因子,在应用中可以修正。文章时间信息、文章出处信息是在文章标题位置的下面若干行中进行匹配查找, 由于正文域和标题确定后,这个部分很小,所以识别准备度很高;文章分页信息等识别方法是,在正文域的尾部寻找若干行,逐行进行数字序列发现;如果发现了连续的数字序列,比如“ 1,2,3,4,5,6... ”等,而且这些数字本身带有的url 链接信息和本网页属于一个网站,则识别成功;步骤3. 4,修正正文域;借助于新闻文章格式的提示帮助,结合上面步骤的文章头信息,文章尾信息(分页信息),可以修正正文域,使其更加尽量精确如图6所示(其中文章尾信息指的是分页信息),修正方式如下I)在域前寻找到文章头(标题、时间等)后,对正文域修正文章头在域内,剪去文章头以前信息;文章头在域外,合并之间部分入正文域;2)在域尾寻找到文章尾信息后(分页等)如果文章尾在域内,则剪去域中尾后部分;如果文章尾在域外,不修正。步骤3. 5,对正文域分块,包括分块以及分块属性判定和冗余分块去除两个步骤, 其中所述分块正文域分块目的是将页面分成几个完整的区域,逐个区域进行属性判定,进而去除冗余,提高抽取结果的精准度。正文域分块方法步骤如下步骤3. 5. 1,采用MDR方法来识别频繁模式(这个方法是Bing Iiu提出的);步骤3. 5. 2,对得到的模式,进行分块标题寻找、分块等父节点上寻,以得到最合适的分块节点组合;然后组合形成分块;步骤3. 5. 3,在正文域DOM树中对所有识别出来的分块进行标记;同时,在构建分块时依据以下准则(I)同父所有子节点中,标记出的分块之间节点也是一个分块,第一个分块之前的节点是一个分块,最后边分块之后节点是一个分块;(2)如果节点子树中存在标记出的分块,则节点本身也是一个分块;步骤3. 6,对正文域分块之分块属性判定和冗余分块去除等;在得到的分块中,判定其链接文字和总体文字数目比;如果分块的链接比大于阈值(O. 5f),则认为是几余分块,树中去除,用hr标签替代;对剩余的频繁模式识别出的分块,由于它们明确的语义信息,将为它们做好标记, 使它们在后续操作中不再拆分(比如一个电视节目表格);步骤3. 7,正文域分段过滤;对正文域分块树进行分段,从而得到正文分段序列。之所以要分段,是因为经过一些观察后发现,冗余信息都是以段或多段的形式出现的,所以为了后续动作中去除冗余信息的方便,对正文域进行了段化。然后进行正文域分段之逐段过滤;(I)生成模式。对所有段,提取其html代码,进行html片段简化,只留下tag名称和内容,取md5 key,构建成模式;模式表达如下模式=md5((内容text/img) + 段落 tag 前向遍历序列+site name) +value其中value是权重信息,也即模式的出现频率;(2)逐段过滤。将得到的模式放入包装器的模式库,进行入库合并;模式库查询到相同模式,则模式加权,也即将value字段合并加权;
如果没有查找到,则入库。步骤3. 8,数据整理,结果生成;合并整理信息,抽取摘要等,抽取成功;步骤3. 9,抽取结束。学习环节和抽取环节很多步骤是对应的,有些步骤是相同的。学习环节,即,上述步骤7,流程如图9所示步骤7. I,HTML解析。对传入网页,解析html构建DOM树;同抽取环节;步骤7. 2,寻找正文域;和抽取环节不同,学习环节通过正文域识别方法来定位正文域。定位定域的目的是初步寻找正文的合理区域,减少方法处理的Dom树范围,同时减少了方法的出错概率;而且,实验中发现,很多网页在正文定域这个阶段就已经正确提出了正文;根据实验统计,所有的正文都会包含在一个或多个嵌套的Div、Table节点中,所以正文定域的思想就是寻找最合适的这样一个Div或Table来;我们的方法是寻找一个信息度最高的Div或Table来;信息度计算公式H = lennotlink*log (l+lenlink/lenallTxt) +a*lennotlink*log (l+lennotlink/lenhtml)其中a是影响因子,目前默认为0· 5 ;Ienffijt link是节点中非连接文字长度;Ienamxt是节点中所有文字长度;Ienhtml是节点的html长度;计算墒时,log中参数加I,使log运算结果都> O ;公式考虑链接文字比,可以保证找到非连接文字尽可能多的候选节点;公式考虑非连接文字和html长度比,可以保证候选节点足够收缩避免找到的候选节点太宽泛;最后我们找到这个想要的Div或者Table,然后在DOM树中回溯到body节点,回溯结束后,就形成了一条路径;回溯过程中,记录经过DOM节点的位置信息,也即每一个DOM 节点在父节点中的从左到右的序号。最后,我们得到一条DOM树路径,同时路径的节点还有其位置信息,比如“Div index = 3 DFS = I = = > Body index = 0 DFS = I = = > www. ifeng. com,,步骤7. 3,路径入库合并;将上述路径并入系统包装器之路径库,并入时,同路径合并加权;如果发现重复的路径,进行合并加权,加权是修改DFS字段,也即将新路径的DFS 值加入旧路径;如果没有发现重复,新路径入库就可以了 ;步骤7. 4,提取文章头信息和文章分页信息;同抽取环节;
步骤7. 5,修正正文域;同抽取环节;步骤7. 6,对正文域分块;同抽取环节;步骤7. 7,正文域分块之分块属性判定和冗余分块去除等;同抽取环节;步骤7. 8,分段学习;先对正文域分段,方式同抽取环节;在分完段后,所有段,生成模式;模式生成过程是,对所有段,提取其html代码,进行html片段简化,只留下tag名称和内容,取md5 key,构建成模式;模式表达如下模式=md5((内容text/img)+ 段落 tag 前向遍历序列+site name)+value其中value是权重信息,也即模式的出现次数。然后将得到的模式放入包装器的模式库,进行入库合并。模式库查询到相同模式, 则模式加权,也即将value字段合并加权;如果没有查找到,则入库就可以了 ;步骤7. 9,模式归纳,也即自动正则生成;模式库中上一步骤得到的模式,有很多事可以正则合并的;如下所示,类似这些模式是应该正则合并的“更多精彩内容,请进健康频道”“更多精彩图片,请进图片频道”“更多精彩新闻,请进资讯频道”合并后模式“更多精彩*,请进*频道”合并后,我们就得到了模式库的另外一种类型的模式正则。这个过程叫做模式归纳。模式归纳的具体步骤如下步骤7. 9. I :对库中所有樽式,提取原串,桉网站分组,每组桉字符串相似度讲行聚类,得到高内聚的几个分组。字符串相似计算简单分词,以“词”为单位,计算词编辑距离,得到相似度;分词时html tag为一个词,英文一个单词为一个词,汉字一个字或标点符号为一个词;聚类方法K_Means方法;步骤7. 9. 2 :对得到每个分组,其内,对每对分段计算其合并后的正则,得到所有可能的不同正则;这些正则的可能性(出现频率)按高低排序,取最大的那个(其覆盖面必然最宽);再验证第二大的那个,如果能够覆盖组内部分未覆盖分段且权重适当,则其也是可取的模式;如何提取两个分段的模式递归地寻找两个分段剩余部分最优共同片段;片段前部分就是不同,需要合并的地方;这总体是一个借助二维表格动态规划的方法;不同部分处理数字不同,则用"\d"合并;数字字母混合不同,用"\d[a-z]〃代替;其它不同,用"*"代替;如果是数字不同,则不同部分扩展到各自所属的所有数字序列,以提闻适应性;比如" /imgs/89089089. jpg"合并为"/imgs 八 d* .jpg"" /imgs/89010197. jpg"步骤7. 9. 3 :对得到的所有正则,保留那些权重高于某个阈值项的,然后加入模式库中;模式归纳结束后,得到若干条正则;加入权重value信息,入模式库中;步骤7. 10,结束。上述所有学习环节最后都更新了两个库style树库(路径库)、模式库;将更新后的这两个库整理入总体包装器库,完成了所有学习步骤。下面给出本系统的一个示例。以抓取http://www. 21cbh. com/channel/review/的为例,总个抓取系统的步骤如下步骤I,先从jobs集合中读入一个如图16格式的job ;步骤2,进入实时抓取模块,进行抓取。包括先进行job解析和调度,解析后产生 job抓取的属性和规则,并调度到抓取集群中的某台机器上;然后进行网页抓取,抓取结束后得到一堆满足job抓取属性和规则的网页,并建索引以方便读取。这些网页都来自于图 17所示区域。步骤3,进入网页抽取模块,对步骤3产生的网页集合进行网页抽取。抽取成功,将产生这些网页对应的文章信息;如果抽取失败,没有发现抽取包装器,这些网页将进入抽取的学习环节,抽取结束,将不会输出具体文章信息,整个抓取流程将结束,转到步骤7 ;步骤4,进入文档排重模块,对所有抽取的文档进行近似排重。剔除掉那些已经抓取到相似内容的文章;步骤5,进入文档自动分类模块,对所有排重后的文章进行分类。得到其内容类别信息,比如“http://www. 21cbh. com/HTML/201 1-12-22/wNMDQwXzM5MDUwNA. html” 网页抽取后的文章,分类模块会给出“财经”类别信息;根据网页抽取后的文章信息及类别信息,形成文章集合,并建立索引以方便读取;步骤6,进入文章发布模块,读取这些文章,发布到我们的内容发布系统中去;这些文章将能马上生成对外页面,供用户浏览;步骤7,总个抓取流程结束。其中所述的实时抓取模块,又分为线上和线下两个运行步骤。线上模块执行具体抓取工作,线下模块为线上模块的运行提供一些数据支持比如代理库等;线下模块一般是每天O点左右执行一次,然后全天不再执行;线上模块是轮询执行,没隔30秒钟就执行一次。以抓取http://www. 21cbh. com/channel/review/的为例,总个抓取系统的实时抓取模块的线下运行步骤如下步骤I,分析日志发现新时间范围。分析如图16所示的job,最近7天抓取日志, 分析它每天的第一次抓取到时间,最后一次抓取到时间,并统计,得到如下数据
DAY IDAY 2DAY 3DAY 4DAY 5DAY 6DAY 7每天第一次抓取到时间02:1303:1002:0501:2504:5603:1104:16每天最后一次抓取到时间06:1506:3206:5407:2107:2306:2608:11分析后,取7天的最小第一次抓取到时间,最大最后一次抓取到时间,得到这个 job的新时间范围为1点到8点;也即01-08,将修改job参数设置;修改后如下所示“2 248836 01-08”步骤2,分析日志发现新时间间隔。分析图16所示job昨天所有轮次的抓取情况, 根据数据,发现昨天共抓取了 73次,其中32次抓取到更新内容,不到50%的比例,所以将放大时间间隔基数,默认放大O. 2倍,新的时间间隔为298603 ;将修改job参数设置,修改后如下所示“2 298603 01-08”步骤3,免费代理搜集和验证。从网上若干代理网址抓取一些免费代理信息,如图 18所示,共得到12个代理。然后对这些代理进行验证。验证方法是提供代理数目3倍的可抓取url ;然后对这些代理的每一个,随机分配3个url供其抓取,成功一个将给加I分的奖励,失败一个将给减I分的惩罚;5秒内抓取成功将给与加5分的奖励,10秒内抓取到将给与加2分的奖励。最后综合每一个代理的得分,去除掉得分2分以下的代理,形成了如图19所示的
有效代理集合
24. 25. 26. 131:80 2 24. 25. 26. 136:80 E 24. 29. 138. 26:80 2 24. 29. 138. 66:80 2 50. 18. 187. 62:8080 E后一列是每一个代理的得分。最后把这些代理全放入我们的代理库中,为线上运行提供支持。以抓取http://www. 21cbh. com/channel/review/的为例,总个抓取系统的实时抓取模块的线上运行步骤如下步骤1,轮询提取一个个job ;(此处默认提取到图16所示的job);步骤2,job解析;解析完了后,产生如下抓取属性I)抓取 http://www. 21cbh. com/channel/review/,不扩展;2)抓取这个页面的〈div class=" home_box" >D0M节点所指定的区域;3)抓取这个区域的满足如下url正则的url链接http://www. 21cbh. com/HTML/. * \· html4)抓取间隔基数是298603毫秒;5)抓取时间范围是一天的I点到8点;
步骤3,时间范围判定。查询此job的时间范围参数是I点到8点,如果时间范围不包含当前时间,将不抓取,返回步骤1,否则进入下一步骤;步骤4,时间间隔判定。查询此job的时间间隔基数是298603毫秒,如果时间间隔指定下一次抓取时间大于当前时间,则将不抓取,返回步骤1,否则进入下一步骤;步骤5,job调度。根据任务解析模块得到的job其它属性进行job调度。调度时候会判断,如果这个job以往已经存在,则不分发,仍然采用本地服务器来抓取;否则,选择服务器群中现jobs数目较少的一台服务器,以实现抓取任务的均衡,从而优化总体的抓取速度;同时考虑尽量避免一台服务器上同网站job太多,以防止单台服务器对单个网站抓取压力太大;步骤6,任务下载。先去代理库中取适当数目的代理,一般是5个;如图19所示的有效代理集合,从中随机选择一个代理,进行任务的本轮下载;步骤7,抓取频率调整。根据此job的抓取间隔基数298603,如果本轮次抓取到更新,则减少下一轮次的抓取时间间隔0. 2倍;如果本轮次没有抓取到更新,则增加下一轮次的抓取时间间隔0.2倍。以下为本发明的抽取系统部分的实际操作示例。以抓耳又凤凰网的台湾即时新闻 http: //news, ifeng. com/taiwan/rss/rtlist 0/ index, shtml为例,总个抽取系统的流程如下:之前这个即时新闻列表中的所有网页已经被抓取,接下来进入本网页抽取系统步骤1,待抽取网页载入。每隔一段时间就载入所有待抽取的网页集合;如果没有待抽取网页,进入步骤6 ;此处将抓取到的所有网页载入,计有42篇;步骤2,对每一个网页,进行包装器查询。根据这批网页的域名www. ifenR. com的提示,我们进入包装器中,查询具体抽取包装器信息,如果查询到,就进入步骤4,进行具体抽取;否则,抽取失败,进入步骤5 ;步骤3,网页抽取。按照查询得到的抽取包装器,对网页进行具体抽取,抽取结束后将抽取结果组织成文章类型;后续将以一个链接为“http://news. ifenR. com/mil/3/ detail 2011 11/21/10798106 0. shtml”的网页为例,给出具体抽取实例;步骤4,标记抽取失败。将抽取失败网页标记,以方便步骤6收集,同时转步骤2 ;步骤5,收集所有抽取失败网页,形成抽取失败网页集合;此处我们共有26篇抽取失败;步骤6,学习判断。按同网站查询抽取失败网页集合,对每一网站的失败网页集合, 判断此网站本轮抽取成功失败比例,决定是否进行机器学习;如果学习,加入待学习网页集合;此处我们的抽取成功了 16个网页,共有网页42个,成功比例是16/42 <0.5,所以需要进行学习;步骤7,网页学习。对每一个网站的所有失败网页进行学习,生成新的抽取包装器; 学习的相应实例将在后面给出;步骤8,抽取包装器管理。将新的抽取包装器放入包装器集合中;步骤9,本轮抽取结束。
在上述实例中,需要展开阐述一个具体的网页抽取步骤。此处,我们用一篇网页 “http://news. ifeng. com/mi 1/3/detail_2011_ll/21/10798106_0. shtml”,网站是 www. ifenR. com为例,演示通过我们的网页抽取步骤,如何得到一篇完整而准确的文章信息。系统读入一轮待抽取的网页,逐篇处理,其中一篇的链接地址是“http://neWS. ifeng. com/mi 1/3/detail_2011_ll/21/10798106_0. shtml”,网站是 www. ifeng. com ;如图 20所示I. HTML解析,最后构建出DOM树;先需要进行网页预处理;字符格式转换,script/style内容过滤,不可视字符剔除等;然后根据html代码及html规范,采用HtmlParser组件来解析网页并得到DOM 树;2.寻找正文域;诵讨www. ifeng. com这个域名,在路径库中杳到如图21所示这条路径(style)这样一条dom树路径,指导我们找到如图22所示红框正文域3.提取文章头、分页信息;具体如何抽取标题、分页信息,方法如下首先,文章头信息,主要是标题信息的提取方法是:(I)提取正文域内开头的若干行,分别计算这些行的标题匹配度并提取最大,得到域内的候选标题行;(2)正文域前边的若干行,分别计算这些行的标题匹配度并提取最大,得到域前的候选标题行;(3)然后,根据启发规则及标题匹配度比较,从中选择一个做标题;标题匹配度的衡量公式如下Pt = a* (l-lenpunc/lenall) +b* (l-lentitle/lenmax title) +c* (l-lenkeywords/lenmax_ keywords)+d* (I _1 ensummery/1 θπ·—summery) +e* (I enauthortext/1 enmaxauthortext) +f*WH+g*Hlen其中Ienpunc是行中标点符号长度;Ienall是行中所有文字长度;Ientitle是行内容和网页中title字段内容的编辑距离;Ienmax title是行内容和网页中title字段内容中的最大值;Keywords指的是网页自带的关键词信息;summery指的是网页自带的摘要字段; authortext指的是网页url对应的锚文字;这三种类型变量意义和上述类似;WH是标签类型加权,行所属的所有节点中出现hi h2. . . center等标签,会给节点加权;Hlen是节点内容长度加权,在大量统计后发现,标题长度在16-23间最常见,其它区间都有各自的分布概率,以此计算出节点的长度加权;a,b,c,d,e,f,g是各个因素的影响因子,在应用中可以修正。然后,文章分页信息识别方法是,在IH文域的尾部寻找若干行,逐行讲行数字序列发现;如果发现了连续的数字序列,比如“1,2,3,4,5,6... ”等,而且这些数字本身带有的
32url链接信息和本网页属于一个网站,则识别成功;本实例的网页没有分页;
4.修正正文域;
修正的方式如图23所示,具体阐述如下
借助于新闻文章格式的提示帮助,结合上面步骤的文章头信息,文章尾信息(分页信息),可以修正正文域,使其更加尽量精确
I)在域前寻找到文章头(标题、时间等)后,对正文域修正
文章头在域内,剪去文章头以前信息;
文章头在域外,合并之间部分入正文域;
2)在域尾寻找到文章尾信息后(分页等)
如果文章尾在域内,则剪去域中尾后部分;
如果文章尾在域外,不修正。
5.正文域进行分块,包括分块步骤,以及分块属性判定和冗余分块去除步骤;
分块的步骤包括
I) MDR方法来识别频繁模式;
2)频繁模式标题寻找等组合节点形成分块。
如图24所示,我们得到了两个分块。
分块属性判定和冗余去除的方式是
在得到的分块中,判定其链接文字和总体文字数目比;
如果分块的链接比大于阈值(O. 5f),则认为是冗余分块,去除(实际上在树中用hr标签替代);
对剩余的频繁模式识别出的分块,由于它们明确的语义信息,将为它们做好标记,使它们在后续操作中不再拆分。
最后正文域被处理后,我们得到如图25所示结果。
6.正文域分段过滤;包括分段、逐段过滤两个步骤;
ιΗ文域进行分段,从而得到ιΗ文分段序列。
分段后的结果如图26所示
其中每一个黑色方框中的内容,是一个分段。
逐段过滤,按段入模式库进行模式匹配过滤
逐个段落提取模式,然后入库匹配;
其中,以下模式被匹配上
d6147701Q€231582869elc39917eld71=>
139€=>
littp://re3.1isg.ifeng.ccM/58114ce5495e21cD/2011/1102/rdn 4eb0f f96dled,jpg=>
www.ifeng,c£Midiv|<i^ s^^ttprZ/res.ifeng.K /58114ce5495e21cQ/2011/1102/rdn 4eb0f7f9€dled,jpgB/>=>这将过滤掉步骤26中的尾部图片分段模式,这个图片是一个广告信息,应该被剔除;最后正文域提取完毕,结果如图27所示。
7.数据整理,结果生成。抽取关键词、摘要等信息,组装成一篇精确抽取的文章;方法结束。在总体抽取实例中,还需要展开阐述网页学习的具体步骤。我们的实例中,共有26篇网页抽取失败,这批网页将全部进入网页学习;以对其中每一个网页学习为例,其步骤如下I. HMTL解析。对传入网页,解析html构建DOM树;具体方法同上一个抽取实例;2.寻找正文域;通过正文域识别方法来定位正文域;(I)提取出网页DOM树中所有的Div、Table节点,然后逐个节点按照如下信息度计算公式计算节点信息度H = lennotlink*log (l+lenlink/lenallTxt) +a*lennotlink*log (l+lennotlink/lenhtml)其中a是影响因子,目前默认为O. 5 ;Ienffijt link是节点中非连接文字长度;Ienamxt是节点中所有文字长度;Ienhtml是节点的html长度;计算时,log中参数加I,使log运算结果都〉O ;(2)找到所有节点中信息度最大的那个节点;如图14所示红框正文域,就是我们找到的这个节点;(3)找到这个想要的Div或者Table后,在DOM树中回溯到body节点,回溯结束后,就形成了一条路径;回溯过程中,记录经过DOM节点的位置信息,也即每一个DOM节点在父节点中的从左到右的序号。(4)最后,得到如图28所示的一条DOM树路径,同时路径的节点还有其位置信息, DFSfg息都是1,也即出现频次是I ;3,路径入库合并;将上述路径并入系统包装器之路径库,并入时,同路径合并加权;如果发现重复的路径,进行合并加权,加权是修改DFS字段,也即将新路径的DFS 值加入旧路径;如果没有发现重复,新路径入库就可以了 ;4,提取文章头信息和文章分页信息;具体方法同上一个网页抽取实例的对应步骤;5,修正正文域;具体步骤同上一个网页抽取实例的对应步骤;6,对正文域分块,包括分块以及分块属性判定以及冗余分块去除;具体步骤同上一个网页抽取实例的对应步骤;7,分段学习,包括正文域分段、逐段生成模式、逐段学习三个步骤;分段的步骤同上一个网页抽取实例的对应步骤;逐段牛成樽式的步骤同上一个网页抽取实例的对应步骤;逐段学习,学习方式是:
分段后的结果如图26所示,按照模式生成的方法,逐个段落生成如下图的模式
d61477010e2315628€9elc39917eld l=>
139β=>
http://res. ifeng.c{M/50114ce5495€21c0/2012/1102/rda 4eb0f7f96dled.Jpgi=^
if eng. cm: |di |<lsg src=*http://re3.ii^.ifeng-ccfl2/58114ce5495€21c0/2011/1102/rdn_4eb0f7f96dledopg1l/>=>其中第二个字段就是具体的value信息;将得到的模式放入包装器的模式库,进行入库合并。模式库查询到相同模式,则模式加权,也即将value字段合并相加;如果没有查找到,则入库就可以了 ;8,模式归纳,也即自动正则生成;模式归纳的具体步骤如下步骤8. I :对库中所有模式,提取原串,按网站分组,每组按字符串相似度进行聚类,得到高内聚的几个分组;步骤8.2 :对得到每个分组,其内,对每对分段计算其合并后的正则,得到所有可能的不同正则;这些正则的出现频率按高低排序,取最大的那个;再验证第二大的那个,如果能够覆盖组内部分未覆盖分段且权重适当,则其也是可取的模式;提取两个分段的模式递归地寻找两个分段剩余部分最优共同片段;片段前部分就是不同,需要合并的地方;这总体是一个借助二维表格动态规划的方法;步骤8.3 :对得到的所有正则,保留那些权重高于某个阈值项的,然后加入模式库中;模式归纳结束后,得到若干条正则;加入权重value信息,入模式库中;9,结束。
权利要求
1.一种文章实时智能抓取系统,其特征在于,所述系统包括实时抓取模块、网页抽取系统、文档近似排重模块、文档自动分类模块和文章发布模块。
2.根据权利要求I所述的系统,其中所述实时抓取模块包括线上和线下运行子模块, 线上运行子模块包括任务提取模块,从任务job集合中轮流提取一个job ;任务解析模块,对每一个任务job进行解析,解析结果将会形成一些属性和规则;任务抓取时间范围检验模块,查询任务的时间范围参数,如果时间范围不包含当前时间,将不抓取,跳过本job,否则,进行抓取时间间隔检验;任务抓取时间间隔检验模块,查询任务的抓取时间间隔,如果时间间隔指定下一次抓取时间大于当前,则将不抓取,跳过本job,否则,进行任务抓取;任务调度模块,根据任务解析模块的job其它属性进行job调度,调度时候会判断, 如果这个job以往已经存在,则不分发,仍然采用本地服务器来抓取;否则,选择服务器群中现jobs数目较少的一台服务器,以实现抓取任务的均衡,从而优化总体的抓取速度;同时考虑尽量避免一台服务器上同网站job太多,以防止单台服务器对单个网站抓取压力太大;任务下载模块,进行任务的具体下载,去代理库中取适当数目的代理,一般是5个;如果没有代理可取,则采用非代理抓取;同时将无代理和上述5个代理合并,形成代理集合; 根据解析得到的任务参数,从代理集合中随机选择一个代理,进行任务的本轮下载;任务抓取频率调整模块,根据job的抓取间隔基数,如果本轮抓取发现更新,则随机减少下一轮次抓取时间间隔;如果没有发现更新,则随机放大下一轮次的抓取间隔;但是保证时间间隔是job的抓取间隔基数的[O. 5,2]倍数范围内。
3.根据权利要求I所述的系统,其中所述实时抓取模块包括线上和线下运行子模块, 线下运行子模块包括任务抓取时间范围发现模块,执行历史抓取日志智能分析工作,从中分析出每一个任务job的时间范围;任务抓取时间间隔发现模块,读入昨天的抓取日志,分析每一个job的一天所有轮次的抓取情况,从中分析出每一个job的更新情况;如果发现job的当前间隔基数保证了 50%以上轮次可以抓取到更新,则不调整;否则适当放大当前间隔基数,以降低无谓抓取请求;免费代理收集和验证模块,从互联网免费代理分享网站下载当天的免费代理集合,对这些免费代理进行验证;随机选择历史抓取链接形成验证url集合,使用每一个代理来执行若干次的url抓取,剔除掉不能成功抓取或者抓取速度太慢的代理,留下成功率高同时速度快的代理,形成当天的代理库,以为线上抓取提供代理支持。
4.一种文章实时智能抓取方法,其特征在于,所述方法包括实时抓取步骤、网页抽取步骤、文档近似排重步骤、文章自动分类步骤和文章发布步骤;所述实时抓取步骤还包括线上和线下运行子步骤。
5.根据权利要求4所述的方法,所述线上运行子步骤包括步骤1,从任务job集合中轮流提取一个job ;步骤2,job解析,对每一个job进行解析,解析结果将会形成一些属性和规则;步骤3,时间范围判定,查询任务的时间范围参数,如果时间范围不包含当前时间,将不抓取,返回步骤1,否则进入下一步骤;步骤4,时间间隔判定,查询任务的抓取时间间隔,如果时间间隔指定下一次抓取时间大于当前,则将不抓取,返回步骤1,否则进入下一步骤;步骤5,job调度,根据任务解析模块的job其它属性进行job调度,调度时候会判断, 如果这个job以往已经存在,则不分发,仍然采用本地服务器来抓取;否则,选择服务器群中现jobs数目较少的一台服务器,以实现抓取任务的均衡,从而优化总体的抓取速度;同时考虑尽量避免一台服务器上同网站job太多,以防止单台服务器对单个网站抓取压力太大;步骤6,任务下载,去代理库中取适当数目的代理,一般是5个;如果没有代理可取,则采用非代理抓取;同时将无代理和上述5个代理合并,形成代理集合;根据解析得到的任务参数,从代理集合中随机选择一个代理,进行任务的本轮下载;步骤7,抓取频率调整,根据job的抓取间隔基数,如果本轮抓取发现更新,则随机减少下一轮次抓取时间间隔;如果没有发现更新,则随机放大下一轮次的抓取间隔;但是保证时间间隔是job的抓取间隔基数的[O. 5,2]倍数范围内;频率调整完成后,返回步骤1,重复执行整个流程。
6.根据权利要求4所述的方法,所述线下运行子步骤包括步骤1,分析日志发现时间范围,执行历史抓取日志智能分析工作,从中分析出每一个任务job的时间范围;步骤2,分析日志发现新时间间隔,读入昨天的抓取日志,分析每一个job的一天所有轮次的抓取情况,从中分析出每一个job的更新情况;如果发现job的当前间隔基数保证了 50%以上轮次可以抓取到更新,则不调整;否则适当放大当前间隔基数,以降低无谓抓取请求;步骤3,免费代理搜集和验证,从互联网免费代理分享网站下载当天的免费代理集合, 对这些免费代理进行验证;随机选择历史抓取链接形成验证url集合,使用每一个代理来执行若干次的url抓取,剔除掉不能成功抓取或者抓取速度太慢的代理,留下成功率高同时速度快的代理,形成当天的代理库,以为线上抓取提供代理支持。
7.如权利要求I所述网页抽取系统,是一种文章类型网页智能抽取系统,包括(1)待抽取网页载入模块,定时查询本地索引,发现新索引就按照索引将网页载入系统内存中;(2)包装器查询模块,对所有待抽取的网页,查询具体抽取包装器信息,如果查询到,就按照抽取包装器,进入抽取模块,进行具体抽取,否则,将网页标记为抽取失败;(3)网页抽取模块,从网页中抽取出具体文章信息,借助已有的抽取包装器;(4)抽取失败网页收集模块,将本轮抽取失败的网页收集起来,按网站分类,以方便进行集中学习;(5)学习判断模块,按同网站查询抽取失败网页集合,根据每一网站的失败网页数量, 计算此网站本轮抽取成功失败比例,决定是否进入网页学习模块;(6)网页学习模块,对所有失败网页进行机器学习,最后生成新的抽取包装器;(7)抽取包装器管理模块,对系统的抽取包装器进行管理,也即对路径库和模式库进行管理,并提供包装器使用接口给网页抽取模块,提供包装器更新接口给网页学习模块。
8.如权利要求7所述的文章类型网页智能抽取系统,其特征在于,所述网页抽取模块还包括HTML解析模块,对传入网页,解析html构建DOM树;正文域寻找模块,根据包装器信息,寻找正文域;文章头和分页信息提取模块,用于提取文章头信息和文章分页信息;正文域修正模块,用于修正正文域;正文域分块模块,用于对正文域分块;同时进行分块属性判定和冗余分块去除;分段过滤模块,用于对正文域进行分段,同时逐段过滤;数据整理模块,用于合并和整理信息,形成文章类型的结果。
9.如权利要求7所述的文章类型网页智能抽取系统,其特征在于,所述网页学习模块还包括HTML解析模块,对传入网页,解析html构建DOM树;正文域寻找模块,用于寻找正文域;路径库更新模块,用于入库合并,同时对路径库进行整理;文章头和分页信息提取模块,用于提取文章头信息和文章分页信息;正文域修正模块,用于修正正文域;正文域分块模块,用于对正文域分块,同时进行分块属性判定和冗余分块去除;分段学习模块,进行正文域分段,逐段构建模式,入模式库合并;模式归纳模块,对所有模式进行归纳,生成规则,入模式库合并;包装器整理模块,对系统包装器进行整理,去除已经无效的信息。
10.如权利要求8或9所述的文章类型网页智能抽取系统,所述正文域分块模块,还包括频繁模式识别模块,采用MDR方法来识别频繁模式;分块模块,对得到的频繁模式,进行分块标题寻找、分块父节点上寻,以得到最合适的分块节点组合,然后组合形成分块;分块标记模块,在正文域DOM树中对所有识别出来的分块进行标记。
11.一种文章类型网页智能抽取方法,其包括如下步骤步骤1,待抽取网页载入;每隔一段时间就载入所有待抽取的网页集合;如果没有待抽取网页,直接进入步骤6 ;步骤2,包装器查询;对所有待抽取的网页,查询具体抽取包装器信息,如果查询到,就进入步骤4,进行具体抽取;否则,抽取失败,进入步骤5 ;步骤3,网页抽取;按照包装器,对网页进行具体抽取,抽取结束后将抽取结果组织成文章类型;步骤4,标记抽取失败;将抽取失败网页标记,以方便步骤6收集,同时回到步骤2 ; 步骤5,收集所有抽取失败网页,形成抽取失败网页集合;步骤6,学习判断;按同网站查询抽取失败网页集合,对每一网站的失败网页集合,判断此网站本轮抽取成功失败比例,决定是否进行机器学习;如果学习,加入待学习网页集合;步骤7,网页学习;对每一个网站的所有失败网页进行学习,生成新的抽取包装器; 步骤8,抽取包装器管理;将新的抽取包装器放入包装器集合中;步骤9,结束。
12.根据权利要求11所述的方法,其中所述步骤3,网页抽取,包括如下步骤步骤3. 1,HTML解析;对传入网页,解析html构建DOM树;步骤3. 2,寻找正文域;步骤3. 3,提取文章头信息和文章分页信息;步骤3. 4,修正正文域;借助于新闻文章格式的提示帮助,结合上面步骤的文章头信息、文章分页信息,可以修正正文域,使其更精确步骤3. 5,对正文域分块;然后进行分块属性判定和冗余分块去除;步骤3. 6,正文域分段过滤;先对正文域分块树进行分段,从而得到正文分段序列;然后进行逐段过滤;步骤3. 7,数据整理,结果生成;合并整理信息,抽取摘要等,抽取成功;步骤3. 8,结束。
13.根据权利要求12所述的方法,其中所述步骤3.I,先对html做预处理,包括字符格式转换,script/style内容过滤,不可视字符剔除等;然后根据html代码及html规范,采用HtmlParser组件来解析网页并得到DOM树。
14.根据权利要求12所述的方法,其中所述步骤3.2,在抽取包装器的style树中查询此网站的定位路径,提取出正文域路径,然后按照路径,在DOM树中遍历,定位到具体DOM节点,这个节点就是我们要找的正文域。
15.根据权利要求12所述的方法,其中所述步骤3.3中,所述文章头信息,主要是标题信息,提取步骤包括(1)提取正文域内开头的若干行,分别计算这些行的标题匹配度并提取最大,得到域内的候选标题行;此处“行”是指根据html的换行标签比如<br>、〈P>等对整个网页的DOM树进行分割后形成的一些相邻dom节点集合,以及其对应的html代码;(2)提取正文域开头外,前边的若干行,分别计算这些行的标题匹配度并提取最大,得到域前的候选标题行;(3)然后,根据启发规则及标题匹配度比较,从中选择一个做标题;
16.根据权利要求15所述的方法,其中所述标题匹配度,其衡量公式如下Pt = a* (l-lenpunc/lenall) +b* (l-lentitle/lenmax title) +c* (1-lenkeywords /I ^max_keywords)+d* (I _1 ensummery/1 θπ·—summery) +e* (I enauthortext/1 enmaxauthortext) +f*WH+g*Hlen其中Ienpunc是行中标点符号长度;Ienall是行中所有文字长度;Ientitle是行内容和网页中title字段内容的编辑距离;Ienmax title是行内容和网页中title字段内容中的最大值;Keywords指的是网页自带的关键词信息;su_ery指的是网页自带的摘要字段; authortext指的是网页url对应的锚文字;这三种类型变量意义和上述类似;WH是标签类型加权,行所属的所有节点中出现hi h2. . . center等标签,会给节点加权;Hlm是节点内容长度加权,在大量统计后发现,标题长度在16-23间最常见,其它区间都有各自的分布概率,以此计算出节点的长度加权;a, b, c, d, e, f, g是各个因素的影响因子,在应用中可以修正。
17.根据权利要求12所述的方法,其中所述步骤3.3中,所述文章分页信息,其识别方法是,在正文域的尾部寻找若干行,逐行进行数字序列发现;如果发现了连续的数字序列, 比如“1,2,3,4,5,6... ”,而且这些数字本身带有的url链接信息和本网页属于一个网站, 则识别成功。
18.根据权利要求12所述的方法,其中所述步骤3.4,包括1)在域前寻找到文章头后,对正文域修正文章头在域内,剪去文章头以前信息;文章头在域外,合并之间部分入正文域;2)在域尾寻找到文章尾信息后如果文章尾在域内,则剪去域中尾后部分;如果文章尾在域外,不修正。
19.根据权利要求12所述的方法,其中所述步骤3.5中正文域分块步骤,包括步骤3. 5. 1,采用MDR方法来识别频繁模式;步骤3. 5. 2,对得到的模式,进行分块标题寻找、分块等父节点上寻,以得到最合适的分块节点组合;然后组合形成分块;步骤3. 5. 3,在正文域DOM树中对所有识别出来的分块进行标记。
20.根据权利要求19所述的方法,其中所述步骤3.5. 2,组合形成分块时,依据以下准则(1)同父所有子节点中,标记出的分块之间节点也是一个分块,第一个分块之前的节点是一个分块,最后边分块之后节点是一个分块;(2)如果节点子树中存在标记出的分块,则节点本身也是一个分块。
21.根据权利要求12所述的方法,其中所述步骤3.5中分块属性判定和冗余分块去除步骤,方法如下在得到的分块中,判定其链接文字和总体文字数目比;如果分块的链接比大于阈值(O. 5f),则认为是冗余分块,树中去除,用hr标签替代; 对剩余的频繁模式识别出的分块,由于它们明确的语义信息,将为它们做好标记,使它们在后续操作中不再拆分。
22.根据权利要求12所述的方法,其中所述步骤3.6,所述正文域逐段过滤方法是,先进行正文域分段,分段方法是根据换行html标签进行切分;然后逐段生成模式;然后进行过滤,过滤方法是,如果模式在包装器的模式库中查询匹配,则模式加权,同时段去除;如果不匹配,则构建新模式,入库,置权为最低。
23.根据权利要求11所述的方法,其中所述网页学习步骤7,包括步骤7. 1,HMTL解析;对传入网页,解析html构建DOM树;步骤7. 2,寻找正文域;通过正文域识别方法来定位正文域;步骤7. 3,路径入库合并;将路径并入系统包装器之路径库,并入时,同路径合并加权,加权是修改频率值,也即将新路径的出现频率值加入旧路径;如果没有发现重复,新路径入库就可以了 ;步骤7. 4,提取文章头信息和文章分页信息;步骤7. 5,修正正文域;步骤7. 6,正文域分块;同时进行分块属性判定和冗余分块去除;步骤7. 7,分段学习,先进行正文域分段;对正文域分块树进行分段,从而得到正文分段序列;然后分段学习,对所有段生成模式,然后入库学习;步骤7. 8,模式归纳,也即自动正则生成;步骤7. 9,结束。
24.根据权利要求23所述的方法,其中在所述步骤7.2,正文包含在一个或多个嵌套的Div、Table节点中,所述所述寻找正文域就是寻找最合适的一个Div或Table ;通过一个信息度最高的Div或Table来实现;所述信息度计算公式H = lennot—link*log (l+lenlink/lenallTxt) +a* I ennotl ink* I o g (I+1 ennotlink/1 enhtm I)其中a是影响因子,目前默认为0.5;Iennot link是节点中非连接文字长度;Ienalllxt是节点中所有文字长度;Ienhtml是节点的html长度;计算时,log中参数加I,使log运算结果都大于O。
25.根据权利要求24所述的方法,其中,找到所述最合适的Div或者Table后,在DOM 树中回溯到body节点,回溯结束后,就形成了一条路径;回溯过程中,记录经过DOM节点的位置信息,也即每一个DOM节点在父节点中的从左到右的序号;最后,得到一条DOM树路径, 同时路径的节点还有其位置信息。
26.根据权利要求23所述的方法,其中所述步骤7.4中,所述文章头信息,主要是标题信息,提取步骤包括(1)提取正文域内开头的若干行,分别计算这些行的标题匹配度并提取最大,得到域内的候选标题行;此处“行”是指根据html的换行标签比如<br>、〈P>等对整个网页的DOM树进行分割后形成的一些相邻dom节点集合,以及其对应的html代码;(2)正文域前边的若干行,分别计算这些行的标题匹配度并提取最大,得到域前的候选标题行;(3)然后,根据启发规则及标题匹配度比较,从中选择一个做标题。
27.根据权利要求26所述的方法,其中所述标题匹配度的衡量公式如下Pt = a* (l-lenpunc/lenall) +b* (l-lentitle/lenmax title) +c* (1-lenkeywords /I ^max_keywords)+d* (I _1 ensummery/1 θπ·—summery) +e* (I enauthortext/1 enmaxauthortext) +f*WH+g*Hlen其中Ienpunc是行中标点符号长度;Ienall是行中所有文字长度;Ientitle是行内容和网页中title字段内容的编辑距离;Ienmax title是行内容和网页中title字段内容中的最大值;Keywords指的是网页自带的关键词信息;su_ery指的是网页自带的摘要字段; authortext指的是网页url对应的锚文字;这三种类型变量意义和上述类似;WH是标签类型加权,行所属的所有节点中出现hi h2. . . center等标签,会给节点加权;Im是节点内容长度加权,在大量统计后发现,标题长度在16-23间最常见,其它区间都有各自的分布概率,以此计算出节点的长度加权;a, b, c, d, e, f, g是各个因素的影响因子,在应用中可以修正。
28.根据权利要求23所述的方法,其中,所述步骤7.4,所述文章分页信息识别方法是, 在正文域的尾部寻找若干行,逐行进行数字序列发现;如果发现了连续的数字序列,比如 “1,2,3,4,5,6... ”,而且这些数字本身带有的url链接信息和本网页属于一个网站,则识别成功。
29.根据权利要求23所述的方法,其中,所述步骤7.5,借助于新闻文章格式的提示帮助,结合上面步骤的文章头信息、文章分页信息,可以修正正文域,使其更加精确;包括1)在域前寻找到文章头后,对正文域修正文章头在域内,剪去文章头以前信息;文章头在域外,合并之间部分入正文域;2)在域尾寻找到文章分页信息后如果文章尾在域内,则剪去域中尾后部分;如果文章尾在域外,不修正。
30.根据权利要求23所述的方法,其中,所述步骤7.6之正文域分块步骤包括如下步骤步骤7. 6. 1,采用MDR方法来识别频繁模式;步骤7. 6. 2,对得到的频繁模式,进行分块标题寻找、分块等父节点上寻,以得到最合适的分块节点组合;然后组合形成分块;步骤7. 6. 3,在正文域DOM树中对所有识别出来的分块进行标记。
31.根据权利要求30所述的方法,其中,所述分块组合方式,依据以下准则(1)同父所有子节点中,标记出的分块之间节点也是一个分块,第一个分块之前的节点是一个分块,最后边分块之后节点是一个分块;(2)如果节点子树中存在标记出的分块,则节点本身也是一个分块。
32.根据权利要求23所述的方法,其中,所述步骤7.6之分块属性判定及冗余分块去除步骤,依据如下准则在得到的分块中,判定其链接文字和总体文字数目比;如果分块的链接比大于阈值(O. 5f),则认为是冗余分块,树中去除,用hr标签替代;对剩余的频繁模式识别出的分块,由于它们明确的语义信息,将为它们做好标记,使它们在后续操作中不再拆分。
33.根据权利要求23所述的方法,其中,所述步骤7.7,分段学习,包括所述正文域分段方法是根据正文域中换行标签的提示,进行内容分割,换行标签之间内容,便是一段;所述生成模式以及分段学习过程是(1)对所有段,提取其html代码,进行html片段简化,只留下tag名称和内容,取md5 key,构建成模式;模式表达如下模式=md5 ((内容text/img) +段落tag前向遍历序列+site name) +value 其中value是权重信息,也即模式的出现频率;(2)然后将得到的模式放入包装器的模式库,进行入库合并;模式库查询到相同模式,则模式加权,也即将value字段合并加权;如果没有查找到,则入库。
34.根据权利要求23所述的方法,其中,所述步骤7. 8,所述模式归纳的骤如下步骤7. 10. I :对库中所有模式,提取原串,按网站分组,每组按字符串相似度进行聚类,得到高内聚的几个分组;步骤7. 10. 2 :对得到每个分组,其内,对每对分段计算其合并后的正则,得到所有可能的不同正则;这些正则的出现频率按高低排序,取最大的那个;再验证第二大的那个,如果能够覆盖组内部分未覆盖分段且权重适当,则其也是可取的模式;提取两个分段的模式递归地寻找两个分段剩余部分最优共同片段;片段前部分就是不同,需要合并的地方;这总体是一个借助二维表格动态规划的方法;步骤7. 10.3 :对得到的所有正则,保留那些权重高于某个阈值项的,然后加入模式库中;模式归纳结束后,得到若干条正则;加入权重value信息,入模式库中。
全文摘要
一种文章实时智能抓取系统,包括实时抓取模块、网页抽取系统、文档近似排重模块、文档自动分类模块和文章发布模块。所述实时抓取模块还包括线上运行的7个模块任务提取模块、任务解析模块、任务抓取时间范围检验模块、任务抓取时间间隔检验模块、任务调度模块、任务下载模块、任务抓取频率调整模块;还包括线下运行的3个模块任务抓取时间范围发现模块、任务抓取时间间隔发现模块、免费代理收集和验证模块。其中所述文章类型网页智能抽取系统,包括待抽取网页载入模块、包装器查询模块、网页抽取模块、抽取失败网页收集模块、学习判断模块、网页学习模块、抽取包装器管理模块。
文档编号G06F17/30GK102609456SQ201210008389
公开日2012年7月25日 申请日期2012年1月12日 优先权日2012年1月12日
发明者厉锟, 吴华鹏, 曾明 申请人:凤凰在线(北京)信息技术有限公司