发明内容
有鉴于此,本公开提供一种爬虫网页采集方法和装置,以增强对网页结构变动的抵抗性,当网页结构变动时不需要变动爬虫规则。
具体地,本公开是通过如下技术方案实现的:
第一方面,提供一种爬虫网页采集方法,所述方法包括:
对于正在采集的当前网页,获取所述网页中的目标文档对象模型DOM节点集合中各个DOM节点的节点特征;
比较各个DOM节点的所述节点特征,得到特征相似的节点相似组;
采集所述节点相似组中各个DOM节点对应的网页内容。
第二方面,提供一种爬虫网页采集装置,所述装置包括:
特征获取模块,用于对于正在采集的当前网页,获取所述网页中的目标文档对象模型DOM节点集合中各个DOM节点的节点特征;
特征比对模块,用于比较各个DOM节点的所述节点特征,得到特征相似的节点相似组;
内容采集模块,用于采集所述节点相似组中各个DOM节点对应的网页内容。
第三方面,提供一种计算机可读存储介质,所述介质上存储有计算机指令,该指令被处理器执行时实现以下步骤:
对于正在采集的当前网页,获取所述网页中的目标文档对象模型DOM节点集合中各个DOM节点的节点特征;
比较各个DOM节点的所述节点特征,得到特征相似的节点相似组;
采集所述节点相似组中各个DOM节点对应的网页内容。
第四方面,提供一种网页采集设备,所述设备包括存储器、处理器,以及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现以下步骤:
对于正在采集的当前网页,获取所述网页中的目标文档对象模型DOM节点集合中各个DOM节点的节点特征;
比较各个DOM节点的所述节点特征,得到特征相似的节点相似组;
采集所述节点相似组中各个DOM节点对应的网页内容。
本公开的爬虫网页采集方法和装置,通过基于网页页面的重复结构和特征相似性比对的分析技术,可以针对一个网页或者某个网页部分找出其中结构相似的内容,能有效抵抗页面布局变动产生的爬取困难,即使网页布局结构发生变化,仍然可以根据上述特点采集到DOM相似节点的内容,获取到这些节点中的高价值信息,不需要变动爬虫规则;并且,该方法具有算法普适性,理论上针对任意编程语言都适用。
具体实施方式
图1示例了一种网页页面,该页面是聚合了很多商品信息的商品列表页面。例如,在网页11中可以包括:商品A的列表项12和商品B的列表项13,当然还可以包括更多商品的列表项。假设爬虫要抓取的网页内容即上述的各个列表项中有关商品的信息,比如,商品名称、商品售价等,传统方式中设置的爬虫规则可以指定所要获取的列表项在网页页面中的位置,则爬虫可以根据该位置直接采集到商品信息。然而,如果网页进行了改版,商品列表项在网页中的位置和呈现方式发生了变化,那么对应的爬虫规则也需要改变以适应页面变化。
本公开的例子提供了一种爬虫网页采集方法,该方法可以实现在网页结构变化时仍然不需变动爬虫规则,使得爬虫规则具有很强的对网页布局变化的抵抗性。仍以图1的商品列表页面为例,不论各个商品的列表项在网页中何种位置,各列表项具有如下特点:如图1所示,各列表项的结构较为相似,比如,列表项12和列表项13都包括商品图片、商品名称、商品售价和商品库存,格式比较规整,由用户的角度来看这些商品列表,列表中显示的各个商品的列表项可以称作是重复的相似结构的列表项。
上述的这些重复相似结构的列表项,在网页页面的DOM结构中,可以是位于属于同一个DOM父节点的DOM结构树中。文档对象模型(Document Object Model,简称DOM)是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM,这是表示和处理一个HTML或XML文档的常用方法。此外,不仅图1示例的商品列表页面具有上述特点,其他类似结构的页面都具有上述特点,比如搜索结果页面,这类页面都包括多条(例如,少则七八条,多则几十条)重复结构。
基于上述的网页页面特点,本公开例子中提供的爬虫网页采集方法可以通过比较页面中DOM节点的相似性,来获取到相似的各个DOM节点,这些相似DOM节点通常即为爬虫要采集的页面内容。图2示例了本公开的爬虫网页采集方法的流程,如图2所示,该方法可以包括:
在步骤201中,对正在采集的当前网页进行预处理,使得网页处于可分析状态。
本步骤中,可以通过编程处理等待网页渲染,或者可以通过仿真手段模拟用户点击网页,触发网页页面的加载,从而使得网页处于可分析状态。即根据前端开发技术和动态网页生成机制,当网页页面加载渲染时,可以获取到网页页面的完整页面内容,以备后续分析。
在步骤202中,获取当前网页中的目标DOM节点集合中的各个DOM节点的节点特征。
例如,网页页面对应的DOM结构树的形式可以是图3示例的一种结构,一个网页页面可以对应着一个图3所示的DOM结构树,而网页中包括的各个页面内容可以分别是所述的DOM结构树中的各个DOM节点。
当要采集网页中的页面内容时,可以选择由整个网页页面中采集,此时可以将以网页根节点为根的DOM节点结构树作为要分析的目标DOM节点集合,例如,图3中以DOM节点1为根的整个结构树31是待分析的节点集合。又例如,还可以选择不对全部的网页页面分析,而是分析部分网页页面,可以选择图3中以DOM节点2为根的整个结构树32作为待分析的节点集合。因此,本步骤可以选择某个DOM节点作为根,并以该根对应的DOM节点结构树作为待分析的目标DOM节点集合,而作为根的节点可以是整个网页的根节点或者是网页中其中一个根元素节点。例如,在图3示例的结构树中,DOM节点1即根节点,其他的DOM节点都可以称为根元素节点。
各个DOM节点的节点特征,可以包括多个特征维度,每个特征维度可以有至少一个特征值。例如,特征维度可以包括节点类型、节点属性等;示例性的,节点类型可以包括类型A、类型B、类型C这三个特征值。在一个例子中,为了方便后续对不同DOM节点之间进行特征是否相似的比较,本步骤还可以还可以将节点在各个特征维度的特征值转换为唯一对应的签名字符。如下的表1示例了一种特征维度、特征值和签名字符之间的对应关系。
表1 签名字符对应关系表
假设某个DOM节点在特征维度W1具有的特征值是w2,在特征维度W2具有的特征值是w5,即该节点的节点特征为(w2,w5),再将特征值转换为签名字符,则w2转换为2,w5转换为5。此外,可以按照一定顺序排列各个签名字符,得到DOM节点的DOM签名,比如,上述例子中,可以按照(特征维度W1,特征维度W2)的顺序排列,则该DOM节点的DOM签名为25。
当然,上述只是以两个特征维度为例,具体实施中,特征维度的数量可以更多,签名的位数也可以更多,比如最终生成的DOM签名可以是3579。需要说明的是,本例子以签名的转换为例,实际实施中并不局限于此,只要将节点特征转换为能够进行特征比较的形式即可。
在步骤203中,比较各个DOM节点的节点特征,得到特征相似的节点相似组。本步骤将开始进行节点特征的比较,找出特征相似的DOM节点相似组。可以遍历目标DOM节点集合中的各个DOM节点,对属于同一个父节点下的各个并列DOM节点,根据所述节点特征进行相似性比较,得到所述节点相似组。
例如,仍以图3为例来说,当将DOM结构树31作为待分析的目标节点集合时,可以由最上层的DOM节点1开始遍历,其中,“DOM节点2、DOM节点3和DOM节点10”是以DOM节点1为父节点的并列DOM节点组,可以通过节点特征比较判断其中是否存在特征相似的节点。继续向下遍历,“DOM节点6、DOM节点7、DOM节点8和DOM节点9”是以DOM节点3为父节点的并列DOM节点,可以通过节点特征比较判断其中是否存在特征相似的节点。以此类推,直至遍历完整个DOM结构树为止。
再通过图4示例一个节点相似组的寻找流程,如图4所示,确定父节点DOM后,将遍历该父节点DOM下的整个DOM结构树,其中,父节点DOM可以是整个网页的根节点或者是网页中其中一个根元素节点。在遍历时,可以先在从属于父节点DOM的一系列并列的第一代子节点DOM-A、DOM-B、DOM-C中寻找节点相似组。其中,可以通过节点的DOM签名进行比较以判断特征相似性,如图4所示,最终比较的结果可以得到多个相似组的相似组集合,比如,相似组1中可以包括DOM-A和DOM-B。此外,在第一代子节点下可能还存在第二代子节点,比如,以DOM-C为父节点的多个第二代子节点DOM-C1、DOM-C2和DOM-C3,可以在这些第二代子节点之间比较DOM签名,得到图4中的特征相似的多个子节点相似组。按照上述方法遍历比较即可,不再详述,最终得到目标DOM节点集合中的所有节点相似组。
此外,有时并不一定能找到节点相似组,可能有些并列DOM节点中并不存在节点相似组。例如,若属于同一个父节点下的各个并列DOM节点的数量小于预定数量阈值,则停止在所述父节点下的各个并列DOM节点寻找节点相似组;比如,图4中的第一代子节点的预设数量阈值设置为八,则若第一代子节点的数量为三,将不会在第一代子节点中寻找节点相似组,因为现阶段前端开发中,相似节点一般在同一个父节点下并且有一定的数量。基于同样的原理,如果本步骤得到的节点相似组中的DOM节点的数量小于预定阈值,则也会将该节点相似组归类为噪音,比如图4中的节点比较过程中也包括噪音。
在一个例子中,基于具有高价值信息的节点一般具有一定复杂度,所以可以将复杂度较小的DOM节点判定为噪音。例如,若一个父节点的节点深度低于预定深度阈值,则不再对该父节点下的各个并列DOM节点寻找节点相似组。上述的基于所采集的目标DOM节点一般具有一定深度以及相似组中的DOM节点数量一般会达到一定数量,可以快速的将数量较少或者复杂度低的DOM节点组排除,不再进行相似性分析,从而可以加快本方法的网页页面分析和采集效率。
在图4中,节点之间的特征比较是通过分类器执行,该分类器可以用于比较DOM节点之间的节点特征相似性,例如可以是比较节点的DOM签名的相似性。如下列举一种比较签名相似性的方式:
例如,可以使用编辑距离来比对两个DOM签名的相似性,编辑距离表示从一个字符串转变为另一个字符串所需要的步骤数,并使用改变率作为相似性参考,改变率越大则两者越不相似。对比DOM签名的编辑距离的算法如下:
对于两个签名a=a1...an和b=b1...bm,他们的编辑距离d(m,n)算法如下:
其中,ωdel、ωins和ωsub分别代表删除、插入和替换这三个操作所花费的代价,本例子中使用传统的Levenshtein距离,这三个花费均为1。若获得了两个DOM签名的编辑距离,我们就可以获得改变率,改变率为编辑距离占改变DOM签名长度的百分比。举例如下:若将DOM签名B变为DOM签名A需要3步,B长12,则改变率为3/12=25%。本例子中还可以设置最小相似度阈值,当改变率小于该给定的最小相似度阈值时,认为两个DOM签名相似。
在步骤204中,采集节点相似组中各个DOM节点对应的网页内容。
经过上述的步骤201至步骤203,将网页页面的各个DOM节点进行分类,找到了特征相似的节点相似组,该节点相似组中的各个DOM节点满足了一定数量和一定复杂度的要求,是爬虫所要采集的目标页面数据,本步骤则可以采集该节点相似组中各个DOM节点对应的网页内容。
在采集到节点相似组中的DOM节点对应的网页内容后,可以针对这些数据进行后续处理,例如可以加入人工干预,对最终的数据进行评估、采集等处理。
本公开例子中的爬虫网页采集方法,是基于网页页面的重复结构和特征相似性比对的分析技术,可以针对一个网页或者某个网页部分找出其中结构相似的内容,能有效抵抗页面布局变动产生的爬取困难,即使网页布局结构发生变化,仍然可以根据上述特点采集到DOM相似节点的内容,获取到这些节点中的高价值信息,不需要变动爬虫规则;并且,该方法具有算法普适性,理论上针对任意编程语言都适用。
为了实现上述的爬虫网页采集方法,本公开例子还提供了一种爬虫网页采集装置,如图5所示,该装置可以包括:特征获取模块51、特征比对模块52和内容采集模块53。
特征获取模块51,用于对于正在采集的当前网页,获取所述网页中的目标文档对象模型DOM节点集合中各个DOM节点的节点特征;
特征比对模块52,用于比较各个DOM节点的所述节点特征,得到特征相似的节点相似组;
内容采集模块53,用于采集节点相似组中各个DOM节点对应的网页内容。
在一个例子中,特征获取模块51,具体用于:对于每一个DOM节点,获取所述DOM节点在各个特征维度中的特征值;将各个所述特征值分别转换为对应的签名字符;按照一定顺序排列各个签名字符,得到所述DOM节点的DOM签名,所述DOM签名用于节点特征的相似性比较。
在一个例子中,特征比对模块52,具体用于:遍历所述目标DOM节点集合中的各个DOM节点;对属于同一个父节点下的各个并列DOM节点,根据所述节点特征进行相似性比较,得到所述节点相似组。
上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机指令的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。例如,所述计算机指令被设备中的处理器执行时可以实现以下步骤:对于正在采集的当前网页,获取所述网页中的目标文档对象模型DOM节点集合中各个DOM节点的节点特征;比较各个DOM节点的所述节点特征,得到特征相似的节点相似组;采集所述节点相似组中各个DOM节点对应的网页内容。
在一个例子中,本公开还可以提供一种网页采集设备,该设备可以包括存储器、一个或多个处理器(CPU)、输入/输出接口、网络接口和内存,以及存储在存储器上并可在处理器上运行的计算机指令。所述处理器执行所述指令时实现以下步骤:对于正在采集的当前网页,获取所述网页中的目标文档对象模型DOM节点集合中各个DOM节点的节点特征;比较各个DOM节点的所述节点特征,得到特征相似的节点相似组;采集所述节点相似组中各个DOM节点对应的网页内容。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
以上所述仅为本公开的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。