具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
图1示出了根据本发明实施例的抓取页面的方法100的示意性流程图。如图1所示,该方法100包括:
S110,获取页面的Xpath元素,并通过对该Xpath元素进行规约获取规约后的Xpath元素;
S120,在该规约后的Xpath元素中确定训练样本;
S130,执行该训练样本中的每个Xpath元素的事件,根据该训练样本中的每个Xpath元素的事件产生的DOM树与原DOM树的编辑距离确定该训练样本中的每个Xpath元素是否有效,根据该训练样本中的每个Xpath元素是否有效训练分类器;
S140,通过该分类器对该规约后的Xpath元素进行分类,获取有效Xpath元素集合;
S150,执行该有效Xpath元素集合中的每个Xpath元素的事件,根据该有效Xpath元素集合中的每个Xpath元素的事件产生的DOM树与原DOM树的编辑距离抓取页面。
现有抓取页面的技术需要执行所有Xpath元素的事件,并进行DOM树结构的比较,效率较低。在本发明实施例中,抓取页面的装置在获取所有Xpath元素并对Xpath元素进行规约后,在规约后的Xpath元素中抽取部分Xpath元素作为训练样本,执行训练样本中的每个Xpath元素的事件,根据训练样本中的每个Xpath元素的事件产生的DOM树与原DOM树的编辑距离确定训练样本中的每个Xpath元素是否有效,并根据训练样本中的每个Xpath元素是否有效训练分类器,然后,通过分类器对规约后的Xpath元素进行分类,获取有效Xpath元素集合,再执行有效Xpath元素集合中的每个Xpath元素的事件,根据有效Xpath元素集合中的每个Xpath元素的事件产生的DOM树与原DOM树的编辑距离抓取页面。由于利用分类器过滤掉了无效Xpath元素,在抓取页面时只需执行有效Xpath元素的事件,不再频繁执行无效Javascript代码。
因此,本发明实施例的抓取页面的方法,根据训练样本中的Xpath元素是否有效训练分类器,通过分类器对Xpath元素进行分类,获取有效Xpath元素集合,再基于有效Xpath元素集合抓取页面,可以过滤掉大量的无效Xpath元素,从而能够提升抓取页面的效率。
本发明实施例的技术方案可以用于抓取动态页面,例如,在web2.0网站中抓取页面。
传统网站页面由唯一的统一资源定位符(Uniform/Universal ResourceLocator,简称为“URL”)确定,网站本身可以看作是一个以页面为顶点,超链接为边的有向图。该经典模型是传统爬虫对web资源的基本假设。应用Ajax技术的网站(例如,web2.0网站)既包含静态内容也包含动态内容,页面本身不再是一个基本单位,它通常是由若干个不同的状态所构成,用户浏览行为通过Javascript事件处理函数改变DOM树的内容与结构,由此产生新的状态,这些状态都同属于一个URL;此外,页面上的超链接又会指向其他的URL页面。
状态是Ajax应用某一时刻在浏览器中呈现的页面DOM结构,也就是说,不同的DOM树即不同的页面状态,客户端用户操作或服务器端数据响应都有可能导致Ajax应用的DOM结构发生变化,从而产生新的状态。Ajax应用中包含一系列离散的状态。其中包括一个初始状态,以及由初始状态经过一次或多次转换得到的很多不同的中间状态。转换是指通过触发某DOM元素的事件,Ajax应用从一个状态转换为另一个状态。
在S110中,抓取页面的装置获取页面的Xpath元素,并通过对Xpath元素进行规约获取规约后的Xpath元素。
可选地,可通过嵌入浏览器技术获取Xpath元素,例如,HtmlUnit包。通过嵌入式浏览器加载起始URL获得默认的DOM树,然后通过分析DOM树获取所有Xpath元素,可选地,可以调用设计好的传统爬虫进行超链分析,获取所有的URL集合,再调用嵌入的浏览器接口获取所有页面的所有Xpath元素。
应理解,获取Xpath元素的方式还可以采用其他页面Javascript代码解析技术,本发明实施例对此并不限定。
在获取Xpath元素后,对Xpath元素进行规约,获取规约后的Xpath元素。由于在web2.0网站中URL不能作为页面的唯一标识,通过相似性判定不能对URL的特征进行归约。在本发明实施例中,以页面元素为中心,使用XPath作为页面元素的描述,并对所有引向需要页面的页面元素的XPath进行了归约,同时记录需触发的事件。对XPath的归约采用如下的归约方法:
被归约的XPath路径经过的页面元素名称必须相同,对页面元素的序号进行归约。如对“/html/body/div[4]/li[1]/a[1]”和“/html/body/div[4]/li[2]/a[1]”这两个XPath,归约为“/html/body/div[4]/li[*]/a[1]”,如还存在“/html/body/div[3]/li[1]/a[1]”这一XPath,归约为“/html/body/div[*]/li[*]/a[1]”。但“/html/body/div[1]”,“/html/body/span[1]”,“/html/body/div[1]/span[1]”中的任何两个均不被归约。这样归约出的XPath结果不再含有无效的页面元素,可以作为抓取过程中的特征。
可选地,在获取规约后的Xpath元素之后,该方法100还包括:
生成规约后的Xpath元素的状态转换图模型。
如图2所示,状态转换图是一个二元组<V,E>,其中V表示状态节点的集合,每个节点v∈V表示页面抓取过程的一个状态;E是节点间的有向边集合,每条边是一个二元组<Xpath,event>。比如图2中的<onclick,/html/body/div[1]/a[1]>,onclick表示事件event,/html/body/div[1]/a[1]表示Xpath,从v1到v2的有向边存在,当且仅当状态v1可以通过触发Xpath所代表的页面元素上的事件event转换到状态v2。
按照状态转换图模型的定义,将获取的规约后的Xpath元素建立状态转换图模型,生成状态转换图模型结构数据。这样,后续步骤可以对建立的状态转换图模型进行处理。
应理解,根据Xpath元素建立状态转换图模型只是处理Xpath元素数据的一种实施方式,不应对本发明的保护范围构成限定,本发明实施例还可以采用其他数据处理方式。
在S120中,抓取页面的装置在规约后的Xpath元素中确定训练样本。
在本发明实施例中,在将Xpath元素规约后,不是执行所有规约后的Xpath元素的事件,而是选取一部分Xpath元素作为训练样本,以训练分类器。例如,可以选取规约后的Xpath元素的10%作为训练样本,本发明实施例对训练元素的比例并不限定,其值可以根据实时状况而调整。
可选地,若将获取的规约后的Xpath元素建立状态转换图模型,则S120包括:
在该状态转换图模型中确定训练样本。
也就是说,若采用建立状态转换图模型的数据处理方式,则在状态转换图模型建立后,在该状态转换图模型中抽取训练样本以训练分类器。
在S130中,抓取页面的装置执行训练样本中的每个Xpath元素的事件,根据训练样本中的每个Xpath元素的事件产生的DOM树与原DOM树的编辑距离确定训练样本中的每个Xpath元素是否有效,根据训练样本中的每个Xpath元素是否有效训练分类器。
具体而言,在确定训练样本后,抓取页面的装置根据训练样本训练分类器。抓取页面的装置执行训练样本中的每个Xpath元素的事件,根据产生的DOM树与原DOM树的编辑距离确定该Xpath元素是否有效。可选地,可以采用限制自上而下映射(Restricted Top-Down Mapping,简称为“RTDM”)算法来计算两个页面的DOM树之间的编辑距离,即执行Xpath元素的事件前后的DOM树的编辑距离。根据DOM树的编辑距离是否大于预定阈值确定Xpath元素是否有效。比如:
若该训练样本中的第一Xpath元素的事件产生的DOM树与原DOM树的编辑距离大于预定阈值,则确定该第一Xpath元素有效;
若该训练样本中的第二Xpath元素的事件产生的DOM树与原DOM树的编辑距离不大于该预定阈值,则确定该第二Xpath元素无效。
应理解,在本发明实施例中,“第一”、“第二”、“第三”和“第四”仅仅是为了区分不同的Xpath元素,不应对本发明实施例构成任何限定。
也就是说,若训练样本中的某一Xpath元素的事件产生的DOM树与原DOM树的编辑距离大于预定阈值,则确定该Xpath元素有效;若训练样本中的某一Xpath元素的事件产生的DOM树与原DOM树的编辑距离不大于预定阈值,则确定该Xpath元素无效。
在确定了训练样本中Xpath元素是否有效后,抓取页面的装置根据训练样本中的每个Xpath元素是否有效训练分类器,即得到Xpath元素有效或无效的分类器。可选地,可以采用支持向量机(Support Vector Machine,简称为“SVM”)算法训练分类器。SVM是通用的知识发现和机器学习方法,主要是针对两类模式的分类问题,在高维特征空间中寻找最大边缘超平面(也称为最优分类面)作为两类的分界面,从而保证对未知样本的最小分类错误率。本发明实施例利用SVM算法训练Xpath元素有效或无效的分类器,例如,类似于“/html/body/div[4]/li[1]/a[1]”这种Xpath路径,将之间的“/”符号去掉后,就变为[html,body,div[4],li[1],a[1]]这样的一维向量,将这种数据模型进行SVM训练,得到Xpath元素有效或无效的分类器。如图3所示,根据样本中各元素有效或无效的结果,调用SVM算法进行训练,得到分类器。
在S140中,抓取页面的装置通过分类器对规约后的Xpath元素进行分类,获取有效Xpath元素集合。
在得到分类器后,抓取页面的装置利用该分类器对规约后的Xpath元素进行分类,过滤掉无效的Xpath元素,得到所有有效Xpath元素,即有效Xpath元素集合。如图3所示,将待分类的Xpath元素输入分类器,从输出中得到有效Xpath元素集合。
可选地,若将获取的规约后的Xpath元素建立状态转换图模型,则S140包括:
将该状态转换图模型输入分类器,获取有效Xpath元素集合。
也就是说,若采用建立状态转换图模型的数据处理方式,则将建立的状态转换图模型作为输入,经过分类器进行分类,过滤掉无效的Xpath元素,得到有效Xpath元素集合。
在S150中,抓取页面的装置执行有效Xpath元素集合中的每个Xpath元素的事件,根据有效Xpath元素集合中的每个Xpath元素的事件产生的DOM树与原DOM树的编辑距离抓取页面。
具体而言,在通过分类器得到有效Xpath元素集合后,抓取页面的装置基于该有效Xpath元素集合中的Xpath元素抓取页面。抓取页面的装置执行该有效Xpath元素集合中的每个Xpath元素的事件,根据该有效Xpath元素集合中的每个Xpath元素的事件产生的DOM树与原DOM树的编辑距离是否大于预定阈值抓取页面。比如:
若该有效Xpath元素集合中的第三Xpath元素的事件产生的DOM树与原DOM树的编辑距离大于该预定阈值,则保存该第三Xpath元素的事件产生的DOM树;
若该有效Xpath元素集合中的第四Xpath元素的事件产生的DOM树与原DOM树的编辑距离不大于该预定阈值,则不保存该第四Xpath元素的事件产生的DOM树。
也就是说,若有效Xpath元素集合中的某一Xpath元素的事件产生的DOM树与原DOM树的编辑距离大于该预定阈值,则认为页面状态转换,保存该Xpath元素的事件产生的DOM树,加入爬行队列中;若有效Xpath元素集合中的某一Xpath元素的事件产生的DOM树与原DOM树的编辑距离不大于该预定阈值,则认为页面状态没有转换,不保存该Xpath元素的事件产生的DOM树。
应理解,在本发明实施例中,在通过分类器对Xpath元素进行分类时,可以将所有规约后的Xpath元素作为输入,也可以将规约后的Xpath元素中除训练样本之外的Xpath元素作为输入,在后一种情况下,即只分类除训练样本之外的Xpath元素,则需要在训练分类器时将训练样本中有效Xpath元素的事件产生的DOM树保存。因此,可选地,在根据训练样本中的每个Xpath元素的事件产生的DOM树与原DOM树的编辑距离确定训练样本中的每个Xpath元素是否有效之后,该方法100还包括:
保存训练样本中的有效Xpath元素的事件产生的DOM树。
在这种情况下,S140包括:
通过分类器对规约后的Xpath元素中除训练样本之外的Xpath元素进行分类,获取有效Xpath元素集合。
这样,分类器输出的有效Xpath元素集合不包含训练样本中的Xpath元素,在根据该有效Xpath元素集合抓取页面时,也省去了对训练样本中的有效Xpath元素的事件的执行以及DOM树的比较。
本发明实施例的抓取页面的方法,根据训练样本中的Xpath元素是否有效训练分类器,通过分类器对Xpath元素进行分类,获取有效Xpath元素集合,再基于有效Xpath元素集合抓取页面,可以过滤掉大量的无效Xpath元素,从而能够提升抓取页面的效率,并且,本发明实施例的抓取页面的方法对内存、CPU等计算机资源的要求降低,从而降低了部署成本。
为了满足业务定制的需求,在本发明实施例中,可选地,在根据训练样本中的每个Xpath元素是否有效训练分类器之前,该方法100还包括:
获取业务定制信息,根据该业务定制信息确定定制规则。
在这种情况下,根据训练样本中的每个Xpath元素是否有效训练分类器,包括:
根据训练样本中的每个Xpath元素是否有效和该定制规则,训练该分类器。
也就是说,在训练分类器前,确定定制规则,然后在训练分类器时加入该定制规则,这样,在利用分类器对Xpath元素进行分类时,就能得到有效且符合定制规则的Xpath元素。因此,本发明实施例的抓取页面的方法,可以满足业务定制需求,具有可扩型和定制性。
下面结合图4详细描述本发明实施例。应注意,这只是为了帮助本领域技术人员更好地理解本发明实施例,而非限制本发明实施例的范围。
401,首先输入一个初始URL作为入口;
402,超链分析,例如调用设计好的传统爬虫进行超链分析,获取所有的URL集合;
403,通过嵌入浏览器技术获取所有Xpath元素,例如调用嵌入的浏览器接口获取所有页面的所有Xpath元素;
404,对步骤403获取的Xpath元素进行规约;
405,根据步骤402-404获取的Xpath元素数据建立状态转换图模型;
406,确定训练样本,即读取配置文件中确定的训练元素的比例,也就是样本的大小;
407,读取配置文件中业务定制信息;
408,确定定制规则;
409,调用RTDM算法计算样本中的Xpath元素的事件产生的DOM树的编辑距离,确定哪些Xpath能产生新状态,哪些不能,即哪些Xpath元素有效,哪些Xpath元素无效;
410,SVM训练,根据样本结果调用SVM算法进行训练;
411,建立分类器;
412,把405中建立的状态转换图模型作为输入,经过分类器进行分类,过滤掉无效的Xpath元素,获得有效Xpath元素集合。
413,基于有效Xpath元素集合抓取页面,执行有效Xpath元素集合中的每个Xpath元素的事件,根据该Xpath元素的事件产生的DOM树与原DOM树的编辑距离是否大于预定阈值抓取页面,若大于预定阈值,则保存该Xpath元素的事件产生的DOM树。
基于上述描述,本发明实施例的抓取页面的方法的一个算法原型如下:
应理解,上述算法原型只是示例,不应对本发明的保护范围构成任何限定。
应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
上文中结合图1至图4,详细描述了根据本发明实施例的抓取网页的方法,下面将结合图5至图7,描述根据本发明实施例的抓取网页的装置。
图5示出了根据本发明实施例的抓取页面的装置500的示意性框图。如图5所示,该装置500包括:
获取模块510,用于获取页面的可扩展标记语言路径语言Xpath元素,并通过对该Xpath元素进行规约获取规约后的Xpath元素;
确定模块520,用于在该规约后的Xpath元素中确定训练样本;
训练模块530,用于执行该训练样本中的每个Xpath元素的事件,根据该训练样本中的每个Xpath元素的事件产生的文档对象模型DOM树与原DOM树的编辑距离确定该训练样本中的每个Xpath元素是否有效,根据该训练样本中的每个Xpath元素是否有效训练分类器;
分类模块540,用于通过该分类器对该规约后的Xpath元素进行分类,获取有效Xpath元素集合;
抓取模块550,用于执行该有效Xpath元素集合中的每个Xpath元素的事件,根据该有效Xpath元素集合中的每个Xpath元素的事件产生的DOM树与原DOM树的编辑距离抓取页面。
本发明实施例的抓取页面的装置,根据训练样本中的Xpath元素是否有效训练分类器,通过分类器对Xpath元素进行分类,获取有效Xpath元素集合,再基于有效Xpath元素集合抓取页面,可以过滤掉大量的无效Xpath元素,从而能够提升抓取页面的效率。
在本发明实施例中,如图6所示,可选地,该装置500还包括:
定制模块560,用于获取业务定制信息,根据该业务定制信息确定定制规则;
该训练模块530具体用于根据该训练样本中的每个Xpath元素是否有效和该定制规则,训练该分类器。
本发明实施例的抓取页面的装置,可以满足业务定制需求,具有可扩型和定制性。
在本发明实施例中,可选地,该训练模块530具体用于,若该训练样本中的第一Xpath元素的事件产生的DOM树与原DOM树的编辑距离大于预定阈值,则确定该第一Xpath元素有效,若该训练样本中的第二Xpath元素的事件产生的DOM树与原DOM树的编辑距离不大于该预定阈值,则确定该第二Xpath元素无效;
该抓取模块550具体用于,若该有效Xpath元素集合中的第三Xpath元素的事件产生的DOM树与原DOM树的编辑距离大于该预定阈值,则保存该第三Xpath元素的事件产生的DOM树,若该有效Xpath元素集合中的第四Xpath元素的事件产生的DOM树与原DOM树的编辑距离不大于该预定阈值,则不保存该第四Xpath元素的事件产生的DOM树。
在本发明实施例中,可选地,该抓取模块550还用于在该训练模块530根据该训练样本中的每个Xpath元素的事件产生的DOM树与原DOM树的编辑距离确定该训练样本中的每个Xpath元素是否有效之后,保存该训练样本中的有效Xpath元素的事件产生的DOM树;
该分类模块540具体用于通过该分类器对该规约后的Xpath元素中除该训练样本之外的Xpath元素进行分类,获取该有效Xpath元素集合。
在本发明实施例中,可选地,该装置500还包括:
生成模块,用于在该获取模块获取规约后的Xpath元素之后,生成该规约后的Xpath元素的状态转换图模型;
该确定模块520具体用于在该状态转换图模型中确定训练样本;
该分类模块540具体用于将该状态转换图模型输入该分类器,获取该有效Xpath元素集合。
在本发明实施例中,可选地,该获取模块510具体用于通过嵌入浏览器技术获取该Xpath元素。
本发明实施例的抓取页面的装置,根据训练样本中的Xpath元素是否有效训练分类器,通过分类器对Xpath元素进行分类,获取有效Xpath元素集合,再基于有效Xpath元素集合抓取页面,可以过滤掉大量的无效Xpath元素,从而能够提升抓取页面的效率,并且,本发明实施例的抓取页面的装置对内存、CPU等计算机资源的要求降低,从而降低了部署成本。
根据本发明实施例的抓取页面的装置500可对应于根据本发明实施例的的方法中的抓取页面的装置,并且装置500中的各个模块的上述和其它操作和/或功能分别为了实现图1至图4中的各个方法的相应流程,为了简洁,在此不再赘述。
图7是本发明实施例提供的抓取页面的装置的结构示意图。如图7所示,装置700一般包括至少一个处理器710,例如CPU,至少一个端口720,存储器730,和至少一个通信总线740。通信总线740用于实现这些设备之间的连接通信。处理器710用于执行存储器730中存储的可执行模块,例如计算机程序;装置700可选地包含用户接口750,包括但不限于显示器,键盘和点击设备,例如鼠标、轨迹球(trackball)、触感板或者触感显示屏。存储器730可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个端口720实现该装置700与网络的通信连接。
在一些实施方式中,存储器730存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:
操作系统732,包含各种系统程序,用于实现各种基础业务以及处理基于硬件的任务;
应用模块734,包含各种应用程序,用于实现各种应用业务。
应用模块734中包括但不限于获取模块510、确定模块520、训练模块530、分类模块540、抓取模块550和定制模块560。
应用模块734中各模块的具体实现参见图5和图6所示实施例中的相应模块,在此不赘述。
应理解,在本发明实施例中,术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。