CN112035722A - 提取动态网页信息的方法、装置及计算机可读存储介质 - Google Patents
提取动态网页信息的方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN112035722A CN112035722A CN202010771233.7A CN202010771233A CN112035722A CN 112035722 A CN112035722 A CN 112035722A CN 202010771233 A CN202010771233 A CN 202010771233A CN 112035722 A CN112035722 A CN 112035722A
- Authority
- CN
- China
- Prior art keywords
- label
- page
- tag
- node
- access path
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
- G06F16/9566—URL specific, e.g. using aliases, detecting broken or misspelled links
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明实施例公开了一种提取动态网页信息的方法、装置及计算机可读存储介质,其中该方法,包括:确定动态网页上每个第一标签的访问路径;访问所述动态页面的种子页,进行信息提取;针对每个第一标签分别执行第一操作,所述第一操作包括:根据该第一标签的访问路径访问该第一标签以触发页面变化,对变化后的页面进行信息提取;其中,第一标签是指会触发页面变化的标签,每个第一标签的访问路径是指在所述动态网页的种子页到该第一标签之间的每层页面上需要访问的标签的索引序列组成的索引序列组合,所述动态网页的种子页是指该动态网页统一资源定位符URL对应的首页面。如此,能够实现对动态网页中功能不同但URL相同的页面进行信息提取。
Description
技术领域
本发明实施例涉及但不限于大数据技术,尤指一种提取动态网页信息的方法、装置及计算机可读存储介质。
背景技术
大数据时代下,网页数据成为重要的海量数据来源,服务于人工智能等核心技术。动态网页可以实现对数据库的访问和与用户的交互,有利于网站内容的自动化更新和复杂功能的实现。
随着动态网页所占比例的迅猛增长,针对动态网页爬虫技术的需求日趋显著,但是本申请发明人发现,动态网页爬虫技术仍面临若干挑战,例如难以对功能不同但URL相同的页面进行信息提取。
发明内容
有鉴于此,本发明一实施例提供了一种提取动态网页信息的方法,包括:
确定动态网页上每个第一标签的访问路径;
访问所述动态页面的种子页,进行信息提取;
针对每个第一标签分别执行第一操作,所述第一操作包括:
根据该第一标签的访问路径访问该第一标签以触发页面变化,对变化后的页面进行信息提取;
其中,第一标签是指会触发页面变化的标签,每个第一标签的访问路径是指在所述动态网页的种子页到该第一标签之间的每层页面上需要访问的标签的索引序列组成的索引序列组合,所述动态网页的种子页是指该动态网页统一资源定位符URL对应的首页面。
本发明一实施例还提供了一种电子装置,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述提取动态网页信息的方法。
本发明一实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有信息处理程序,所述信息处理程序被处理器执行时实现上述提取动态网页信息的方法。
本发明实施例提供的技术方案,能够实现对动态网页中功能不同但URL相同的页面进行信息提取。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的其它优点可通过在说明书以及附图中所描述的方案来实现和获得。
附图说明
附图用来提供对本申请技术方案的理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
图1为本发明一实施例提供的一种提取动态网页信息的方法的流程示意图;
图2为本发明一实施例中一个网站的完整标签树的示意图;
图3是图2对应的网站的会触发页面变化的标签构成的标签树的示意图;
图4为本发明一实施例提供的一种提取动态网页信息的方法的流程示意图;
图5为本发明一实施例中网站的会触发页面变化的标签构成的标签树的示意图;
图6为本发明一实施例中基于标签访问路径来访问一个标签的流程示意图;
图7为本发明一实施例提供的一种电子装置的结构示意图。
具体实施方式
本申请描述了多个实施例,但是该描述是示例性的,而不是限制性的,并且对于本领域的普通技术人员来说显而易见的是,在本申请所描述的实施例包含的范围内可以有更多的实施例和实现方案。尽管在附图中示出了许多可能的特征组合,并在具体实施方式中进行了讨论,但是所公开的特征的许多其它组合方式也是可能的。除非特意加以限制的情况以外,任何实施例的任何特征或元件可以与任何其它实施例中的任何其它特征或元件结合使用,或可以替代任何其它实施例中的任何其它特征或元件。
本申请包括并设想了与本领域普通技术人员已知的特征和元件的组合。本申请已经公开的实施例、特征和元件也可以与任何常规特征或元件组合,以形成由权利要求限定的独特的发明方案。任何实施例的任何特征或元件也可以与来自其它发明方案的特征或元件组合,以形成另一个由权利要求限定的独特的发明方案。因此,应当理解,在本申请中示出和/或讨论的任何特征可以单独地或以任何适当的组合来实现。因此,除了根据所附权利要求及其等同替换所做的限制以外,实施例不受其它限制。此外,可以在所附权利要求的保护范围内进行各种修改和改变。
此外,在描述具有代表性的实施例时,说明书可能已经将方法和/或过程呈现为特定的步骤序列。然而,在该方法或过程不依赖于本文所述步骤的特定顺序的程度上,该方法或过程不应限于所述的特定顺序的步骤。如本领域普通技术人员将理解的,其它的步骤顺序也是可能的。因此,说明书中阐述的步骤的特定顺序不应被解释为对权利要求的限制。此外,针对该方法和/或过程的权利要求不应限于按照所写顺序执行它们的步骤,本领域技术人员可以容易地理解,这些顺序可以变化,并且仍然保持在本申请实施例的精神和范围内。
图1为本发明一实施例提供的一种提取动态网页信息的方法的流程示意图,如图1所示,该方法包括:
步骤101,确定动态网页上每个第一标签的访问路径;
步骤102,访问所述动态页面的种子页,进行信息提取;
步骤103,针对每个第一标签分别执行第一操作,所述第一操作包括:
根据该第一标签的访问路径访问该第一标签以触发页面变化,对变化后的页面进行信息提取;
其中,第一标签是指会触发页面变化的标签,每个第一标签的访问路径是指在所述动态网页的种子页到该第一标签之间的每层页面上需要访问的标签的索引序列组成的索引序列组合,所述动态网页的种子页是指该动态网页统一资源定位符URL对应的首页面。
在一示例中,所述确定动态网页上每个第一标签的访问路径,包括:
获取所述动态网页上所有可以交互的标签,将获取的标签按照标签在页面代码中出现的页面层级和先后顺序进行索引;针对每个待确定访问路径的第一标签,分别执行如下操作:
当存在与该待确定访问路径的第一标签在同一表单中的第二标签时,获取所述第二标签的索引序列;将该待确定访问路径的第一标签的索引追加到所述第二标签的索引序列后面,得到该待确定访问路径的第一标签的索引序列;当该第一标签不存在父标签时,直接将该待确定访问路径的第一标签的索引序列作为该待确定访问路径的第一标签的访问路径;当该第一标签存在父标签时,将所得到的索引序列追加到该待确定访问路径的第一标签的父标签的索引序列的后面,得到该待确定访问路径的第一标签的访问路径;
当不存在与该待确定访问路径的第一标签在同一表单中的第二标签时,当该第一标签不存在父标签时,直接将该待确定访问路径的第一标签的索引作为该待确定访问路径的第一标签的访问路径;当该第一标签存在父标签时,直接将该待确定访问路径的第一标签的索引追加到该待确定访问路径的第一标签的父标签的索引序列的后面,得到该待确定访问路径的第一标签的访问路径;
其中,第二标签是指不会触发页面变化的标签,所述第一标签的父标签是指被访问后将触发变化跳转到该第一标签所在页面的标签。
在一示例中,每个第一标签的访问路径P如下式所示:
P=<S0,S1,...,Sk-1,Sk>(k≥0)
其中,k表示该第一标签所在页面的层级,Si表示在第i层页面需要访问的第一标签的索引序列,i取值为0到k,S0表示在种子页需要访问的第一标签的索引序列;
当存在与需要访问的第一标签在同一表单中的第二标签时,Si如下式所示:
Si=<Ni,0,Ni,1,...,Ni,m-1,Ni,m>(m≥1)
其中,Ni,m表示在第i层页面需要访问的第一标签的索引,Si中除Ni,m之外的索引为在第i层页面与需要访问的第一标签处于同一表单中的第二标签的索引;Ni,0为在第i层页面与需要访问的第一标签处于同一表单中的第一个第二标签的索引;
当不存在与该第一标签在同一表单中的第二标签时,Si如下式所示:
Si=<Ni,0>
其中,Ni,0表示在第i层页面需要访问的第一标签的索引;
所述获取所述第二标签的索引序列,包括:
将所述第一标签所在页面上所有第二标签的索引按照先后顺序进行排序得到一个或者多个第二标签组的索引序列;
当一个第二标签组的索引序列中的最大索引与该第一标签的索引Nk,m相邻且小于Nk,m,则将该第二标签组的索引序列作为与该第一标签在同一个表单中的第二标签的索引序列。
在一示例中,在确定动态网页上每个第一标签的访问路径之后,该方法还包括:
按照页面层级和先后顺序依次将每个第一标签作为一个节点添加到预先设置的标签树中;
其中,所述标签树的根节点对应所述动态网页的种子页,所述根节点的每一个子节点与所述种子页上的每个第一标签一一对应,除了根节点以外,每个节点被访问时触发变化后的页面上的第一标签与该节点的子节点一一对应;
除了根节点以外的每个节点携带对应的第一标签的访问路径以及相应的操作方式,每个第一标签相应的操作方式为该标签默认的操作方式或者自定义的操作方式。
在一示例中,所述针对每个第一标签分别执行第一操作,包括:
按照标签树的节点层级和先后顺序依次遍历所述标签树上除了根节点之外的每一层的每一个节点,针对遍历到的节点对应的第一标签分别执行所述第一操作。
在一示例中,所述根据该第一标签的访问路径访问该第一标签以触发页面变化,包括:
判断该节点是上一个访问的第一标签对应的节点的子节点,还是兄弟节点或者兄弟节点的子节点;
当该节点是上一个访问的标签对应的节点的子节点时,对该第一标签的访问路径中的最后一个索引序列中的各个索引对应的标签依次执行相应的操作方式以触发页面变化;
当该节点是上一个访问的标签对应的节点的兄弟节点或者兄弟节点的子节点时,对该第一标签的访问路径中的每一个索引序列中每个索引对应的标签依次执行每个标签相应的操作方式以触发页面变化。
在一示例中,每次访问完一个第一标签之后,该方法还包括:
判断是否满足终止条件;
当满足时,终止信息提取;
当不满足时,继续遍历下一个节点;
其中,所述终止条件包括以下一种或者多种:
访问的页面个数达到预设值;访问了所述动态网页对应网站上所有页面;访问的页面层数达到预设值;跳转到新页面,而且而且新页面的域名与所述动态网页的网站域名不同。
在一示例中,所述针对每个第一标签分别执行第一操作,包括:
步骤11,将所述种子页添加到预先设置的标签树中作为根节点;将种子页作为当前页面,根节点作为当前节点;
步骤12,将当前页面中的每个第一标签分别添加到标签树中作为当前节点的一个子节点;
步骤13,判断当前页面中是否还存在未访问的第一标签,如果存在则进行步骤14;如果不存在未访问的第一标签,则判断当前节点是否为根节点,如果是根节点则结束;如果不是根节点则将上一级页面作为当前页面,将当前节点的父节点作为当前节点,返回步骤13;
步骤14,按照在当前页面中的出现顺序,对下一个未访问的第一标签进行第一操作;然后判断变化后的页面中是否存在第一标签,如果存在则将变化后的页面作为当前页面,将所访问的第一标签对应的节点作为当前节点,返回步骤12;如果不存在第一标签则返回步骤13。
本发明实施例提供的技术方案,能够实现对动态网页中功能不同但URL相同的页面进行信息提取。
在本发明的一实施例中,上一实施例中,所述确定动态网页上每个第一标签的访问路径,包括:
获取所述动态网页上所有可以交互的标签,将获取的标签按照标签在页面代码中出现的页面层级和先后顺序进行索引;针对每个待确定访问路径的第一标签,分别执行如下操作:
当存在与该待确定访问路径的第一标签在同一表单中的第二标签时,获取所述第二标签的索引序列;将该待确定访问路径的第一标签的索引追加到所述第二标签的索引序列后面,得到该待确定访问路径的第一标签的索引序列;当该第一标签不存在父标签时,直接将该待确定访问路径的第一标签的索引序列作为该待确定访问路径的第一标签的访问路径;当该第一标签存在父标签时,将所得到的索引序列追加到该待确定访问路径的第一标签的父标签的索引序列的后面,得到该待确定访问路径的第一标签的访问路径;
当不存在与该待确定访问路径的第一标签在同一表单中的第二标签时,当该第一标签不存在父标签时,直接将该待确定访问路径的第一标签的索引作为该待确定访问路径的第一标签的访问路径;当该第一标签存在父标签时,直接将该待确定访问路径的第一标签的索引追加到该待确定访问路径的第一标签的父标签的索引序列的后面,得到该待确定访问路径的第一标签的访问路径;
其中,第二标签是指不会触发页面变化的标签,所述第一标签的父标签是指被访问后将触发变化跳转到该第一标签所在页面的标签。
在一示例中,所述确定动态网页上每个第一标签的访问路径,包括:
获取待爬虫动态网页上所有可以交互的标签,将获取的标签按照标签在页面代码中出现的页面层级和先后顺序进行索引;
针对种子页上的每个第一标签,分别执行如下操作:
当存在与该第一标签在同一个表单中的第二标签时,获取所述第二标签的索引序列;
将该第一标签的索引追加到所述第二标签的索引序列的后面得到该第一标签的索引序列;
将该第一标签的索引序列追加到所述种子页的索引序列的后面得到该第一标签的访问路径;
针对由种子页上的第一标签触发变化后的下一层页面上的第一标签,执行如下操作:
当存在与该第一标签在同一个表单中的第二标签时,获取所述第二标签的索引序列;
将该第一标签的索引追加到所述第二标签的索引序列的后面得到该第一标签的索引序列;
将该第一标签的索引序列追加到所述种子页上的第一标签的访问路径的后面得到该第一标签的访问路径;
以此类推,直至变化后的下一层页面上不存在第一标签为止;
其中,第二标签是指不会触发页面变化的标签,所述种子页的索引序列为预设的特定值。
例如,所述种子页的索引序列为该种子页的URL。
一个动态网页上往往会有一个或者多个HTML(HyperText Markup Language,超文本标记语言)标签,对动态网页中的标签进行操作之后,例如点击提交按钮等,网页脚本会通过提交表单自动地与后台的数据库进行交互并跳转到一个新的页面,但是这种情况下URL(Uniform Resource Locator,统一资源定位符)可能保持不变,即打开的新页面与原页面的URL相同,在这种情况下无法用一个URL来定位一个页面,而是需要对页面上的标签进行操作来触发页面变化到达下一层页面。基于此,本发明实施例提出了通过标签的访问路径来访问标签以触发页面变化,从而能够对变化后的页面进行信息提取。
其中,页面变化分为2种:一种是当前页面存在部分标签发生变化但URL不变,即页面变化前后的2个页面属于功能不同但URL相同的页面。另一种是页面变化后跳转到新的页面且URL改变。动态网页中,有些页面变化是由表单提交触发的,表单包含的标签分为表单域标签(即第二标签)和表单按钮。其中,表单域标签用于输入和选择等操作,一般不会触发页面变化,例如文本输入框和选择框等,本实施例中又将此类标签定义为第二标签,即不会触发页面变化的标签;表单按钮是通过点击操作提交表单的标签,会触发页面变化,例如提交按钮等,本实施例中又将此类标签定义为第一标签,即会触发页面变化的标签。
在本实施例中,针对访问路径的定义,说明如下:
动态网页中,页面变化往往伴随着表单数据的提交,因此,在对会触发页面变化的标签进行操作之前,可能需要先输入表单数据,也就是对一个或者多个表单域标签进行操作。基于此,针对每个会触发页面变化的第一标签,定义是指从所述动态网页的种子页到该第一标签之间由每层页面上需要访问的标签的索引序列组成的索引序列组合,所述动态网页的种子页是指该动态URL对应的首页面。
在本示例中,对标签进行索引的方式可以是现有的任意一种索引方式。例如可以采用数字编号索引,每一个页面上的所有标签按照自然数逐一递增来索引,即每个页面上的第一个标签的索引为0,第二个标签的索引为1,第3个标签的索引为2,以此类推。
本示例中,一个第一标签的访问路径P可以用下式(1)表示:
P=<S0,S1,...,Sk-1,Sk>(k≥0) 式(1)
其中,k表示该第一标签所在页面的层级,Si表示在第i层页面需要操作的标签的索引序列,i取值为0至k,例如,当i=2时,S0对应种子页上需要访问的标签的索引序列,S1对应种子页上的第一标签触发变化后的下一层页面上需要访问的标签的索引序列,S2对应种子页上的第一标签触发变化后的下一层页面上需要访问的标签再次触发变化后的下一层页面上需要访问的标签的索引序列。上一层页面上的第一标签为下一层第一标签的父标签。
其中,当存在与需要访问的第一标签在同一表单中的第二标签时,Si可以用下式(2)表示:
Si=<Ni,0,Ni,1,...,Ni,m-1,Ni,m>(m≥1) 式(2)
其中,Ni,m表示在第i层页面需要访问的第一标签的索引。Si中只有最后一个标签(即索引为Ni,m的标签)会触发页面变化,其它标签都是表单域标签。即,Si中Ni,m为该第一标签的索引,Si中除Ni,m之外的索引为与该第一标签处于同一表单中的第二标签的索引。例如当m=2时,Ni,0为在第i层页面与需要访问的第一标签处于同一表单中的第一个第二标签的索引,Ni,1为在第i层页面与需要访问的第一标签处于同一表单中的第二个第二标签的索引,Ni,2表示在第i层页面需要访问的第一标签的索引。
其中,当不存在与该第一标签在同一表单中的第二标签时,Si如下式(3)所示:
Si=<Ni,0> 式(3)
其中,Ni,0表示在第i层页面需要访问的第一标签的索引。
例如,从当前页面所有表单域标签的索引中,获取所有表单域标签组(即第二标签组)的索引序列。当一个表单域标签组的索引序列中的最大索引,与该第一标签的索引Nk,m相邻且小于Nk,m,那么,这个标签组的标签就是与该第一标签在同一表单中的第二标签,将这个标签组的索引序列作为与该第一标签在同一个表单中的表单域标签的索引序列(例如,式(2)中的<Nk,0,Nk,1,...,Nk,m-1>)。将该第一标签的索引Nk,m追加到与该标签在同一个表单中的表单域标签的索引序列中,便得到在当前页面上访问该标签需要操作的标签索引序列(例如,式(2)中的Sk=<Nk,0,Nk,1,...,Nk,m-1,Nk,m>)。将在当前页面上访问该第一标签需要操作的标签索引序列,追加到该第一标签的父标签的访问路径(例如,式(1)中的<S0,S1,...,Sk-1>)中,就得到该第一标签的访问路径。
其中,一个页面上的第一标签可以为一个或者多个,第二标签也可以为一个或者多个,与一个第一标签在同一个表单中的表单域标签的索引序列为与该第一标签在同一页面上的多个第二标签的索引按照先后顺序进行排序后的索引序列。
例如,在第i层页面上存在2个可以交互的标签,按照标签在页面代码中出现的先后顺序,位于前面的是输入标签,即一个表单域标签,也可以称为第二标签,位于后面的是提交标签,即表单按钮,也可以称为第一标签。则该第二标签在该页面的索引为0,该第一标签a在该页面的索引为1,则Si=<0,1>。
假设该第一标签a不存在父标签,即该第一标签a是位于种子页上的标签,则该第一标签a的访问路径为P=<<0,1>>。
假设该第一标签a存在父标签,即该第一标签所在页面还存在上一层页面即第i-1层页面,该第i-1层页面为种子页,该种子页包括两个标签,第一个为输入标签,即一个表单域标签,也可以称为第二标签,位于后面的是提交标签,即表单按钮,也可以称为第一标签b(即第一标签a的父标签)。则该第二标签在该页面的索引为0,该第一标签b在该页面的索引为1,则Si-1=<0,1>,则第一标签a的访问路径为P=<<0,1>,<0,1>>。
例如,在第i层页面上存在3个可以交互的标签,按照标签在页面代码中的出现顺序,位于前面的是用户名输入标签和密码输入标签,即2个表单域标签,也可以称为第二标签,位于后面的是提交标签,即一个表单按钮,也可以称为第一标签a。则2个第二标签在该页面的索引分别为0和1,该第一标签a在该页面的索引为2,则Si=<0,1,2>。
假设该第一标签a不存在父标签,即该第一标签a是位于种子页上的标签,则该第一标签a的访问路径为P=<<0,1,2>>。
假设该第一标签a存在父标签,即该第一标签所在页面还存在上一层页面即第i-1层页面,分别针对该第i-1层页面是否为种子页的情况,进行举例:
假设该第i-1层页面为种子页,该种子页包括两个可交互的标签,第一个为输入标签,即一个表单域标签,也可以称为第二标签,位于后面的是提交标签,即表单按钮,也可以称为第一标签b(即第一标签a的父标签)。则该第二标签在该页面的索引为0,该第一标签b在该页面的索引为1,则Si-1=<0,1>,则第一标签b的访问路径为P=<<0,1,2>>,第一标签a的访问路径为P=<<0,1>,<0,1,2>>。
假设该第i-1层页面不为种子页,还存在第i-2层页面,该第i-2层页面为种子页,该第i-1层页面包括两个可交互的标签,第一个为输入标签,即一个表单域标签,也可以称为第二标签,位于后面的是提交标签,即表单按钮,也可以称为第一标签c(即第一标签b的父标签)。则该第二标签在该页面的索引为0,该第一标签c在该页面的索引为1,则Si-1=<0,1>;该第i-2层页面为种子页,该第i-2层页面包括两个可交互的标签,第一个为输入标签,即一个表单域标签,也可以称为第二标签,位于后面的是提交标签,即表单按钮,也可以称为第一标签d(即第一标签c的父标签),则Si-2=<0,1>,则第一标签d的访问路径为P=<<0,1>>,第一标签c的访问路径为P=<<0,1>,<0,1>>,第一标签a的访问路径为P=<<0,1>,<0,1>,<0,1,2>>。
例如,在第i层页面上存在三个可以交互的标签,按照标签在页面代码中的出现顺序,位于前面的是输入标签,即一个表单域标签,也可以称为第二标签,位于中间的是提交标签,即表单按钮,也可以称为第一标签a,位于最后面的为一个超链接按钮,也可以称之为第一标签b。则该第二标签在该页面的索引为0,该第一标签a在该页面的索引为1,该第一标签b在该页面的索引为2,则针对第一标签a,Si=<0,1>:
假设该第一标签a、b不存在父标签,即该第一标签a、b是位于种子页上的标签,则该第一标签a的访问路径为P=<<0,1>>,该第一标签b的访问路径为P=<<2>>。
假设该第一标签a和b存在父标签,即该第一标签a、b所在页面还存在上一层页面即第i-1层页面,分别针对该第i-1层页面是否为种子页面,进行举例:
假设该第i-1层页面为种子页,该种子页包括两个可交互的标签,第一个为输入标签,即一个表单域标签,也可以称为第二标签,位于后面的是提交标签,即表单按钮,也可以称为第一标签c(即第一标签a的父标签)。则该第二标签在该页面的索引为0,该第一标签c在该页面的索引为1,则Si-1=<0,1>,则第一标签a的访问路径为P=<<0,1>,<0,1>>,第一标签b的访问路径为P=<<0,1>,<2>>。
假设该第i-1层页面不为种子页,还存在第i-2层页面,假设该第i-2层页面为种子页,该第i-1层页面包括两个可交互的标签,第一个为输入标签,即一个表单域标签,也可以称为第二标签,位于后面的是提交标签,即表单按钮,也可以称为第一标签c(即第一标签a、b的父标签)。则该第二标签在该页面的索引为0,该第一标签c在该页面的索引为1,则Si-1=<0,1>;该第i-2层页面为种子页,该第i-2层页面包括两个标签,第一个为输入标签,即一个表单域标签,也可以称为第二标签,位于后面的是提交标签,即表单按钮,也可以称为第一标签d(即第一标签c的父标签),则Si-2=<0,1>,则第一标签d的访问路径为P=<<0,1>>,第一标签c的访问路径为P=<<0,1>,<0,1>>,第一标签a的访问路径为P=<<0,1>,<0,1>,<0,1>>,第一标签b的访问路径为P=<<0,1>,<0,1>,<2>>。
在本发明的一实施例中,可以使用树结构来存储和遍历动态网页上所有会触发页面变化的标签,树中每个标签节点由该标签的访问路径和相应的操作方式构成。树的每层代表一个页面上的所有会触发页面变化的标签。
在上述实施例的基础上,在确定动态网页上每个第一标签的访问路径之后,该方法还包括:
按照页面层级和先后顺序依次将每个第一标签作为一个节点添加到预先设置的标签树中;
其中,所述标签树的根节点对应所述动态网页的种子页,所述根节点的每一个子节点与所述种子页上的每个第一标签一一对应,除了根节点以外,每个节点被访问时触发变化后的页面上的第一标签与该节点的子节点一一对应;
除了根节点以外的每个节点携带对应的第一标签的访问路径以及相应的操作方式,每个第一标签相应的操作方式为该标签默认的操作方式或者自定义的操作方式。
在本示例中,基于标签树来存储和遍历网站上所有可以触发页面变化的HTML标签。例如,标签树可以采用双链表结构,来实现标签树的宽度优先遍历。
在本示例中,针对生成标签树的过程,说明如下:
首先,初始化标签树的双链表的首尾指针为空;
然后,可以用浏览器自动化工具访问动态网页的种子页URL以及触发页面变后的每层页面,获取每个页面上所有可以进行交互的标签;
在本示例中,可以根据标签类型获取每个页面上所有可以进行交互的标签。
本示例中,标签类型可以采用默认的标签类型或者自定义的标签类型。
其中,针对可以与用户交互的标签,可以根据其默认的操作方式默认区分为不同的类型。例如,默认的标签类型包括但不限于:用于进行点击的标签、用于进行选择的标签、用于进行输入的标签、用于进行文件选择的标签、用于进行其它操作方式的标签。该其它操作方式是指点击、选择、输入、文件选择之外的操作方式。例如,针对默认的操作方式为点击的标签,如超链接(<a>)、提交按钮(<input>submit)和普通按钮(<input>button)等,可以将该类标签的类型默认为用于进行点击的标签。针对默认的操作方式为选择特定索引的选项的标签,如单选框(<input>radio)、复选框(<input>checkbox)和下拉框(<select>)等,可以将该类标签的类型默认为用于进行选择的标签。针对默认的操作方式为输入特定字符串的标签,如文本输入框(<input>text)和密码输入框(<input>password)等,可以将该类标签的类型默认为用于进行输入的标签。针对默认的操作方式为选择特定文件的标签,可以将该类标签的类型默认为用于进行文件选择的标签。针对对应默认的其它操作方式的标签,以此类推,不再一一叙述。
其中,可以自定义每一个可以与用户交互的标签的类型,还可以分别针对每种标签类型,自定义不同的操作方式。例如,对于操作方式唯一的标签,可以直接根据该操作方式自定义该标签的类型和相应的操作方式;例如,针对用于点击的标签,可以自定义其类型为用于点击的标签,其相应的操作方式为点击。而对于其它操作方式不唯一的标签,可以为该标签自定义类型和不同的操作方式;例如,针对相同类型的不同标签,可以基于标签的Xpath、所在页面网址或其它HTML属性(例如,name或value等)对这些标签进行区分,然后用户可以为相同类型的不同标签自定义不同的操作方式。
在一示例中,所述根据标签类型获取每个页面上所有可以进行交互的标签,包括:
为动态网页预先设置可以交互的标签的类型;
针对页面上每个标签,只要该标签的标签类型属于预先设置的可以交互的标签类型,就认为该标签为可以进行交互的标签。
然后,将获取的标签按照标签在页面代码中出现的先后顺序进行索引;
在本示例中,对标签进行索引的方式可以是现有的任意一种索引方式。例如可以采用数字编号索引,每一个页面上的所有标签按照自然数逐一递增来索引,即每个页面上的第一个标签的索引为0,第二个标签的索引为1,第3个标签的索引为2,以此类推。
再然后,从获取的标签中确定所有第一标签和第二标签;
在一示例中,可以预先设置第一标签的标签类型;例如,从动态网页上所有可以交互的标签的类型中选取出所有会触发页面变化的类型,设置为第一标签的标签类型。还可以预先设置第二标签的标签类型;例如,从动态网页上所有可以交互的标签的类型中选取出所有不会触发页面变化的类型,设置为第二标签的标签类型。
例如,该默认的类型包括但不限于:用于进行点击的标签、用于进行选择的标签、用于进行输入的标签、用于进行文件选择的标签等。其中,点击操作通常会引起页面变化,因此从中选取用于点击操作的标签作为第一标签的标签类型,例如超链接、提交按钮等,用于后续对这些标签进行操作之后得到的页面进行爬取,从而提高爬虫效率。
例如,用于输入和选择等操作的标签通常不会触发页面变化,因此将这些标签对应的类型设置为第二标签的标签类型。另外,这类标签也可以称作表单域标签,因为这类标签一般用于输入表单信息例如文本输入框和选择框等。
在一示例中,所述从获取的标签中确定所有第一标签和第二标签,包括:
针对获取的标签中的每个标签,执行如下判断:
当该标签的类型属于第一标签的标签类型时,则该标签即为第一标签;
当该标签的类型属于第二标签的标签类型时,则该标签即为第二标签。
再然后,针对每个第一标签生成对应的访问路径;
在本示例中,给定当前页面层数为k以及一个第一标签在当前页面的索引为Nk,m,生成该第一标签的访问路径的步骤包括::
a、从当前页面所有的表单域标签索引中,获取与该第一标签在同一个表单中的表单域标签的索引序列;
其中,同一个表单中可能存在多个表单域标签和一个触发页面变化的标签(即表单按钮)。一般地,同一个表单中的多个表单域标签在代码中出现的位置是相邻的,可以将相邻的表单域标签看作一个表单域标签组。同一个表单中的表单域标签组与触发页面变化的第一标签,在代码中出现的位置往往相邻,而且前者往往先于后者出现。因此,给定一个可触发页面变化的第一标签,可以选取出现位置与该第一标签相邻的表单域标签组,作为与该第一标签在同一个表单中的表单域标签。
基于以上思想,一个简易有效的方法是,将当前页面所有表单域标签的索引按照先后顺序进行排序得到表单域标签组的索引序列。当一个表单域标签组的索引序列中的最大索引,与该第一标签的索引Nk,m相邻且小于Nk,m,那么,将这个表单域标签组的索引序列作为与该标签在同一个表单中的表单域标签的索引序列,例如,该第一标签的表单域标签的索引序列为<Nk,0,Nk,1,...,Nk,m-1>。
b、生成在当前页面上访问该第一标签的索引序列;
将该第一标签的索引Nk,m追加到与该第一标签在同一个表单中的表单域标签的索引序列中,便得到在当前页面上访问该标签需要操作的标签索引序列,例如Sk=<Nk,0,Nk,1,...,Nk,m-1,Nk,m>。
c、生成该第一标签的访问路径。
当该第一标签不存在父标签时,直接将在当前页面上访问该第一标签的索引序列作为该第一标签的访问路径;
当该第一标签存在父标签时,将在当前页面上访问该第一标签的索引序列,追加到该第一标签的父标签的访问路径(例如,式(1)中的<S0,S1,...,Sk-1>)中,就得到该标签的访问路径,如式(1)中的P=<S0,S1,...,Sk-1,Sk>。
一个第一标签的父标签是指被访问后将触发变化跳转到该第一标签所在页面的标签。
在另一示例中,图2给出了一个网站的全部HTML标签构成的标签树,在每个标签上标注了该标签的类型,以及该标签在当前页面所有标签中的索引。图3给出了同一个网站中,由会触发页面变化的标签构成的标签树,在每个标签节点上标注了该标签的类型以及该标签的访问路径。
如图2、3所示,在该网站的第2层页面中,会触发页面变化的标签的索引包括0、2、4,分别对应的标签是一个按钮<button>和两个超链接<a>。下面基于上面针对生成标签的访问路径的过程的描述,对生成这些标签的访问路径的过程进行详细说明:
首先,获取当前页面表单域标签的索引,得到1和3;
然后,分别针对当前页面每个会触发页面变化的标签,生成该标签的访问路径:
针对第0个标签<button>,不存在与该标签在同一个表单中的表单域标签,则在当前页面上访问第0个标签需要操作的标签索引序列为<0>。该标签的父节点的访问路径为<<0,1>>,将<0>追加到<<0,1>>中,将得到该标签的访问路径为<<0,1>,<0>>。
针对第2个标签<a>,与该标签在同一个表单中的表单域标签的索引为1,则在当前页面上访问该标签需要操作的标签索引序列为<1,2>。该标签的父节点的访问路径为<<0,1>>,将<1,2>追加到<<0,1>>中,得到该标签的访问路径为<<0,1>,<1,2>>。
生成第4个标签<a>的访问路径的过程与第2个标签类似,故不再赘述。
最后,按照页面层级和先后顺序依次将每个第一标签作为一个节点添加到预先设置的标签树中。
其中,标签树中的每个节点携带对应标签的访问路径和相应的操作方式。
例如,将节点一一添加到标签树对应的链表尾部,每添加一个节点链表尾指针后移,指向添加的节点。
在本发明的一实施例中,在上一实施例的基础上,按照标签树的节点层级和先后顺序依次遍历所述标签树上除了根节点之外的每一层的每一个节点,针对遍历到的节点对应的第一标签分别执行如下操作:
根据该第一标签的访问路径访问该第一标签以触发页面变化,对变化后的页面进行信息提取。
在一示例中,所述根据该第一标签的访问路径访问该第一标签以触发页面变化,包括:
判断该节点是上一个访问的第一标签对应的节点的子节点,还是兄弟节点或者兄弟节点的子节点;
当该节点是上一个访问的标签对应的节点的子节点时,对该第一标签的访问路径中的最后一个索引序列中的各个索引对应的标签依次执行相应的操作方式以触发页面变化;
当该节点是上一个访问的标签对应的节点的兄弟节点或者兄弟节点的子节点时,对该第一标签的访问路径中的每一个索引序列中每个索引对应的标签依次执行每个标签相应的操作方式以触发页面变化。
在一示例中,遍历标签树中的标签节点,针对每个标签节点,基于该标签的访问路径,使用浏览器自动化测试工具访问该标签,然后从页面中进行信息提取。
其中,浏览器自动化测试工具为现有的任一种浏览器自动化测试工具,例如,Selenium,以及无界面浏览器Phantomjs和Splash等。
在另一示例中,上述遍历和访问过程包括:
首先,从标签树对应的链表中,获取当前标签节点(即首指针所指向的节点),以及上一个访问的标签节点(即当前节点的前驱指针所指向的节点);
然后,判断当前的标签节点是上一个访问的标签节点的子节点,还是兄弟节点或者兄弟节点的子节点;
在一示例中,可以通过访问路径进行判断:给定上一个访问的标签的访问路径序列长度为k,如果其访问路径的前k-1个元素构成的子序列,正好是当前标签的访问路径序列,则认为当前标签是上一个访问的标签的子节点,否则就是兄弟节点或者兄弟节点的子节点,这2种情况下的访问策略有所不同。
然后,用浏览器自动化工具,对获取的当前标签节点进行访问:
如果当前标签是上一个访问的标签的子节点,则只需要对当前标签访问路径中的最后一个索引序列中对应的标签依次进行操作,以触发页面变化,对变化后的页面进行信息提取;
如果当前标签是上一个访问的标签的兄弟节点或者兄弟节点的子节点,则依次按照当前标签访问路径中的每一个标签索引序列,分别对索引序列中每个索引所对应的标签进行操作,以触发页面变化,对变化后的页面进行信息提取;
基于访问路径来访问标签的原因为:在当前标签是上一个访问的标签的兄弟节点的情况下,一个直接的解决方案是,返回上一页,到达父节点对应的页面,然后对当前标签进行操作,但是该方案对于动态网站来说是不可行的。因为浏览器通过URL来定位一个页面,页面的前进和后退是通过URL的变化来实现的,浏览器并不会记住表单提交的数据,而动态网站通过表单来传递数据到后台服务器,URL很可能不变(也就是背景技术中提到的功能不同但URL相同的页面)。故提出用访问路径的方法,从种子页开始,基于访问路径中的标签索引,对相应的标签进行操作。
其中,所述进行操作是指按照该标签相应的操作方式进行操作。
再然后,首指针后移,指向下一个节点,再对获取的当前标签节点进行访问,以此类推,直至首尾指针指向同一个节点,访问结束。
在另一示例中,图3给出了一个网站中会触发页面变化的标签节点构成的标签树,结合图3,对上述访问标签的过程进行解释:
给定当前标签和上一个访问的标签的访问路径分别为<<0,1>,<0>>和<<0,1>>时,可以看出前者是后者的子节点。因此,只需对当前标签访问路径中的最后一个索引序列(即<0>)中对应的标签依次进行操作,也就是对当前页面索引为0的标签(即<button>)进行点击操作,针对点击后触发变化后的网页,进行信息提取;
给定当前标签和上一个访问的标签的访问路径分别为<<0,1>,<3,4>>和<<0,1>,<1,2>>时,可以看出前者是后者的兄弟节点。为了访问当前标签<<0,1>,<3,4>>,首先访问种子页,获取种子页上的标签索引,得到第0个和第1个标签,分别对应密码输入框和提交按钮。然后,依次对种子页上需要操作的标签的索引序列<0,1>中每个索引所对应的标签进行操作,即输入密码,点击提交,实现自动登录;在新的页面上的操作过程与种子页类似,用于文件上传。至此,对标签<<0,1>,<3,4>>的操作结束,针对点击后触发变化后的网页,进行信息提取。
本实施例提供的技术方案实现了对功能不同但URL相同的页面的爬取,只需输入爬虫种子页URL,便可以自动爬取与种子页面直接或间接关联的所有页面。
在本发明的另一实施例中,在上一实施例的基础上,每次访问完一个标签之后,该方法还包括:
判断是否满足终止条件;
当满足时,终止信息提取;
当不满足时,继续遍历下一个节点;
其中,所述终止条件包括以下一种或者多种:
访问的页面个数达到预设值;访问了所述动态网页对应网站上所有页面;访问的页面层数达到预设值;跳转到新页面,而且新页面的域名与所述动态网页的网站域名不同。
在一示例中,终止的条件可以包括但不限于这4种:访问的页面个数达到预设值,即标签树对应的双链表的节点个数达到预设值;访问了网站上所有页面,即标签树对应的双链表首尾指针指向同一个节点;访问的页面层数达到预设值,即标签树的深度达到预设值;跳转到新页面,而且新页面的域名与种子页URL的域名不同。
在本发明的一实施例中,不需要先生成标签树再遍历和访问标签树中的节点对应的标签,而是边生成标签树边访问,从而提升信息提取的效率。
在上述实施例的基础上,所述针对每个第一标签分别执行第一操作,包括:
步骤11,将所述种子页添加到预先设置的标签树中作为根节点;将种子页作为当前页面,根节点作为当前节点;
步骤12,将当前页面中的每个第一标签分别添加到标签树中作为当前节点的一个子节点;
步骤13,判断当前页面中是否还存在未访问的第一标签,如果存在则进行步骤14;如果不存在未访问的第一标签,则判断当前节点是否为根节点,如果是根节点则结束;如果不是根节点则将上一级页面作为当前页面,将当前节点的父节点作为当前节点,返回步骤13;
步骤14,按照在当前页面中的出现顺序,对下一个未访问的第一标签进行第一操作;然后判断变化后的页面中是否存在第一标签,如果存在则将变化后的页面作为当前页面,将所访问的第一标签对应的节点作为当前节点,返回步骤12;如果不存在第一标签则返回步骤13。
在一示例中,提供了一种提取动态网页信息的方法,如图4所示,该方法包括:
步骤401,设置标签树为双链表结构;
在一示例中,还包括:初始化双链表的首尾指针为空;
其中,将标签树设置为双链表结构,可以实现标签树的宽度优先遍历。
在一示例中,标签树中,根节点对应动态网页的种子页。种子页可以为要爬取的站点的首页。
在另一示例中,还可以将种子页URL设置为特定值。
步骤402,设置网站上所有可以交互的标签类型及相应的操作方式;
在一示例中,所述设置网站上所有可以交互的标签类型及相应的操作行为可以采取如下2种方式中的任意一种:
方式一:使用默认的标签类型及相应的操作方式设置网站上所有可以交互的标签类型及相应的操作方式;
方式二:使用自定义的标签类型及相应的操作方式设置网站上所有可以交互的标签类型及相应的操作方式。
其中,针对方式一,针对可以与用户交互的标签,根据其操作方式默认区分为不同的类型。例如,该默认的类型包括但不限于:用于进行点击的标签、用于进行选择的标签、用于进行输入的标签、用于进行文件选择的标签、用于进行其它操作方式的标签。该其它操作方式是指点击、选择、输入、文件选择之外的操作方式。例如,针对默认的操作方式为点击的标签,如超链接(<a>)、提交按钮(<input>submit)和普通按钮(<input>button)等,可以将该类标签的类型默认为用于进行点击的标签。针对默认的操作方式为选择特定索引的选项的标签,如单选框(<input>radio)、复选框(<input>checkbox)和下拉框(<select>)等,可以将该类标签的类型默认为用于进行选择的标签。针对默认的操作方式为输入特定字符串的标签,如文本输入框(<input>text)和密码输入框(<input>password)等,可以将该类标签的类型默认为用于进行输入的标签。针对默认的操作方式为选择特定文件的标签,可以将该类标签的类型默认为用于进行文件选择的标签。针对对应默认的其它操作方式的标签,以此类推,不再一一叙述。
其中,针对方式二,可以自定义每一个可以与用户交互的标签的类型,还可以分别针对每种类型,自定义不同的操作方式。在一示例中,对于操作方式唯一的标签可以直接根据该操作方式自定义该标签的类型和相应的操作行为;例如,针对用于点击的标签,可以自定义其类型为用于点击的标签,其相应的操作方式为点击。而对于其它操作方式不唯一的标签,可以为该标签自定义类型和不同的操作行为;例如,针对相同类型的不同标签,可以基于标签的Xpath、所在页面网址或其它HTML属性(例如,name或value等)对这些标签进行区分,然后用户可以为相同类型的不同标签自定义不同的操作方式。
在一示例中,使用方式一的爬虫方案时,只需输入种子页URL,便可以自动化爬取与种子页面直接或间接关联的所有页面。使用方式二的爬虫方案支持用户自定义网站上所有标签的操作,适用于爬取需要认证登录的网站。
其中,设置待爬取网站上所有可以进行交互的标签的类型及相应的操作行为,可以用于浏览器自动化工具(例如,Selenium)后续对其进行自动化访问。
步骤403,设置会触发页面变化的标签类型和不会触发页面变化的标签类型;
其中,页面变化分为2种:一种是当前页面存在部分标签发生变化但URL不变,即页面变化前后的2个页面属于功能不同但URL相同的页面。另一种是页面变化后跳转到新的页面且URL改变。动态网页中,有些页面变化是由表单提交触发的,表单包含的标签分为表单域标签和表单按钮。其中,表单域标签用于输入和选择操作等,一般不会触发页面变化,例如文本输入框和选择框等;表单按钮是通过点击操作提交表单的标签,会触发页面变化,例如提交按钮等。
在一示例中,可以从设置的网站上所有可以交互的标签类型中选取出所有会触发页面变化的类型,设置为会触发页面变化的标签类型。还可以从设置的网站上所有可以交互的标签类型中选取出所有不会触发页面变化的类型,设置为不会触发页面变化的标签类型。
例如,该默认的类型包括但不限于:用于进行点击的标签、用于进行选择的标签、用于进行输入的标签、用于进行文件选择的标签、用于进行其它操作方式的标签。而点击操作通常会引起页面变化,因此从中选取用于点击操作的标签作为会触发页面变化的标签类型,例如超链接、提交按钮等,用于后续对这些标签进行操作之后得到的页面进行爬取,从而提高爬虫效率。
例如,用于输入和选择等操作的标签通常不会触发页面变化,因此将这些标签对应的类型设置为不会触发页面变化的标签类型。另外,这类标签也可以称作表单域标签,因为这类标签一般用于输入表单信息,例如文本输入框和选择框等。
步骤404,将所述种子页添加到所述标签树中作为根节点,将种子页作为当前页面,根节点作为当前节点;用浏览器自动化工具访问标签树的根节点;
在一示例中,浏览器自动化工具包括但不限于Selenium、以及无界面浏览器Phantomjs和Splash等。
在一示例中,在链表中,根节点携带的信息是种子页URL,通过访问种子页URL来访问根节点。
步骤405,获取当前页面上所有可以交互的标签,将获取的标签按照标签在页面代码中出现的先后顺序进行索引;
在一示例中,获取当前页面上所有可以交互的标签,包括:
根据步骤402中预先设置的标签类型获取当前页面上所有可以交互的标签。
例如,只要当前页面上的标签的类型属于步骤402中设置的标签类型中的类型,就确定该标签为可以交互的标签。
此时,链表的首指针后移,指向下一个节点。下一个节点即首指针当前指向的节点的后继指针所指向的节点。
步骤406,为获取的每个标签生成对应的标识;
其中,一个标签的标识用于唯一地识别该标签。
在一示例中,标签的标识可以但不限于包括元素类型和HTML标签属性,例如,可以用六元组来表示标签的标识:<标签类型,id,type,name,value,href,text>。对于不存在的属性,可以用空值代替,例如,对于标签<input type="submit"value="提交"/>,该标签的标识为<"input","","submit","","提交","">。
步骤407,从所获取的标签中选取符合预设条件的标签;为所选取的符合预设条件的标签中的每个标签生成对应的访问路径;
在一示例中,预设条件包括但不限于:
访问的标签的类型为会触发页面变化的标签类型;
新加入标签书的标签的标识,与标签树中所有现有的标签标识不相同。
其中,通过预设条件就可以筛选出未访问过的会触发页面变化的标签。
其中,生成标签的访问路径的方法和过程参见上面实施例的描述,在此不再赘述。
步骤408,将所选取的会触发页面变化的标签中的每个标签作为一个标签节点,并将其添加到标签树中;
其中,每一个标签节点携带相应标签的标识、访问路径以及相应的操作方式。
在一示例中,所述针对所选取的会触发页面变化的标签中的每个标签作为一个标签节点添加到标签树中,包括:
针对所选取的会触发页面变化的标签中的每个标签,按照标签在当前代码中出现的先后顺序,分别执行如下操作:
将该标签作为一个节点添加到标签树对应的链表尾部,即链表尾节点的后继指针指向添加的节点,同时将尾指针后移,也指向添加的节点。
步骤409,从标签树对应的链表中,获取首指针所指向的节点,将首指针指向的节点作为当前节点,针对当前节点执行如下操作:
基于该节点对应的标签访问路径使用浏览器自动化工具访问对应的标签以触发页面变化,然后从变化后的页面中进行内容解析及相关信息提取;
步骤410,判断是否符合终止条件,当符合时,信息提取结束;当不符合时,将变化后的页面设置为当前页面,返回步骤405。
其中,访问对应的标签以触发页面变化,是指基于访问路径访问该标签,按照该标签的相应操作方式对该标签执行操作以触发页面变化。
在一示例中,基于该节点对应的标签访问路径,使用浏览器自动化工具访问对应的标签以触发页面变化,在该步骤之前还包括:
从标签树对应的链表中,获取上一个访问的节点(即当前节点的前驱指针所指向的节点);
所述基于该节点对应的标签访问路径使用浏览器自动化工具访问对应的标签触发页面变化,包括:
判断当前节点是上一个访问的标签对应的节点的子节点,还是兄弟节点或者兄弟节点的子节点;
然后,访问当前节点;
针对当前节点是上一个访问的标签对应的节点的子节点,或者是兄弟节点或者兄弟节点的子节点,这2种情况下的访问策略有所不同:
如果当前节点是上一个访问标签对应的节点的子节点,则只需要对当前节点对应的标签访问路径中的最后一个索引序列中对应的标签按照相应的操作方式进行操作,触发页面变化,针对变化后的页面进行信息提取;
如果当前节点是上一个访问标签对应的节点的兄弟节点,或者当前节点是上一个访问标签对应的节点的兄弟节点的子节点,则依次按照当前节点的标签访问路径中的每一个标签索引序列,分别对索引序列中每个索引所对应的标签按照相应的操作方式进行操作,触发页面变化,针对变化后的页面进行信息提取。
在一示例中,可以通过访问路径进行判断。例如,给定上一个访问的标签的访问路径序列长度为k,如果其访问路径的前k-1个元素构成的子序列,正好是当前标签的访问路径序列,则认为当前节点是上一个访问的标签对应的节点的子节点,否则就是兄弟节点或者兄弟节点的子节点。
例如,图3给出了一个网站中会触发页面变化的标签构成的节点构成的标签树,结合图3,进行如下示例性说明:
当给定当前标签和上一个访问的标签的访问路径分别为<<0,1>,<0>>和<<0,1>>时,可以看出前者是后者的子节点。因此,只需对当前标签访问路径中的最后一个索引序列(即<0>)中对应的标签进行操作,也就是对当前页面索引为0的标签(即<button>)进行点击操作。
当给定当前标签和上一个访问的标签的访问路径分别为<<0,1>,<3,4>>和<<0,1>,<1,2>>时,可以看出前者是后者的兄弟节点。为了访问当前标签<<0,1>,<3,4>>,首先访问种子页,获取种子页上的标签索引,得到第0个和第1个标签,分别对应密码输入框和提交按钮。然后,依次对种子页上需要操作的标签的索引序列<0,1>中每个索引所对应的标签进行操作,即输入密码,点击提交,实现自动登录;在新的页面上的操作过程与种子页类似,用于文件上传。至此,对标签<<0,1>,<3,4>>的操作结束。
又例如,如图5所示,在图3的基础上访问路径为<<0,1>,<1,2>>的标签,触发变化后的页面上仍然存在会触发页面变化的标签<button>,其在变化后的页面上的索引为<0>,其访问路径为<<0,1>,<1,2>,<0>>。在对图5中的访问路径为<<0,1>,<1,2>>的标签进行访问后(即进行输入和提交操作,触发页面变化并对触发变化后的页面进行信息提取后),还包括:
将触发变化后的页面作为当前页面,回到步骤405,此时当前页面上存在满足预设条件的标签,即访问路径为<<0,1>,<1,2>,<0>>的<button>标签,将该标签作为一个节点添加到标签树的链表尾部,尾指针后移指向该新加入的节点;再次执行到步骤410,由于上次访问结束后首指针后移,指向下一个节点,此时首指针指向的是访问路径为<<0,1>,<3,4>>的节点<a>,将该节点作为当前节点,由于上一个访问的节点<a>节点的访问路径为<<0,1>,<1,2>>,可以看出当前节点为上一个访问节点的兄弟节点,因此首先访问种子页,获取种子页上的标签索引,得到第0个和第1个标签,分别对应密码输入框和提交按钮。然后,依次对种子页上需要操作的标签的索引序列<0,1>中每个索引所对应的标签进行操作,即输入密码,点击提交,实现自动登录;在新的页面上的操作过程,用于文件上传,即输入文件,点击提交。至此,对标签<<0,1>,<3,4>>的操作结束。
由于标签<<0,1>,<3,4>>触发变化后的页面上不存在会触发页面变化的标签,因此回到步骤405后标签树中不会添加新的节点,再次回到步骤410,由于上次访问结束后首指针后移,指向下一个节点,此时首指针指向的是访问路径为<<0,1>,<1,2>,<0>>的<button>标签,将该节点作为当前节点,由于上一个访问的节点<a>的访问路径为<<0,1>,<3,4>>,可以看出当前节点为上一个访问节点的兄弟节点的子节点,因此首先访问种子页,获取种子页上的标签索引,得到第0个和第1个标签,分别对应密码输入框和提交按钮。然后,依次对种子页上需要操作的标签的索引序列<0,1>中每个索引所对应的标签进行操作,即输入密码,点击提交,实现自动登录;在新的页面上的操作过程,用于选择选择按钮,点击提交,进入下一层新页面,在下一层新页面进行点击操作。至此,对标签<<0,1>,<1,2>,<0>>的操作结束。
本发明实施例提供的技术方案,遍历标签树中的标签节点,针对每个标签节点,基于该标签的访问路径,使用浏览器自动化测试工具访问该标签,然后从页面中进行信息提取,克服了现有技术中无法对功能不同但URL相同的动态页面的信息提取的问题。
在本发明的另一实施例中,基于访问路径来访问标签的原因为:在当前节点是上一个访问的标签对应的节点的兄弟节点的情况下,一个直接的访问标签的方案是,返回上一页,到达父节点对应的页面,然后对当前节点对应的标签进行操作,但是该方案对于动态网站来说是不可行的。因为浏览器通过URL来定位一个页面,页面的前进和后退是通过URL的变化来实现的,浏览器并不会记住表单提交的数据,而动态网站通过表单来传递数据到后台服务器,URL很可能不变(也就是上面提到的功能不同但URL相同的页面)。故提出使用访问路径来访问标签,从种子页开始,基于访问路径中的标签索引,对相应的标签进行操作。
例如,给定一个标签,其访问路径如式(1)所示,即P=<S0,S1,...,Sk-1,Sk>,其中,第i层页面需要操作的标签的索引序列Si如式(2)所示,即Si=<Ni,0,Ni,1,...,Ni,m-1,Ni,m>,则访问当前页面上所有会触发页面变化的标签的流程如图6所示,包括:
1、初始化当前待访问标签的访问路径为P=<S0,S1,...,Sk-1,Sk>;
2、用浏览器自动化工具访问种子页;
3、初始化当前访问页面的页面层数i为0;
4、获取当前页面上的标签,并对这些标签按照在页面代码中出现的先后顺序进行索引;
5、从P中获取第i层页面需要操作的标签的索引序列,得到Si=<Ni,0,Ni,1,...,Ni,m-1,Ni,m>;
6、初始化Si中元素的索引j为0;
7、对Si中第j个元素Ni,0所对应的标签进行操作;
8、Si中元素的索引j递增1;
9、判断Si中元素的索引j是否大于Si的序列长度m+1;
10、如果是,则对当前页面所有标签的访问结束;
11、如果不是,则返回7继续执行;
12、当前访问页面的页面层数i递增1;
13、判断当前访问的页面层数i是否大于当前标签的访问路径p的序列长度k+1;
14、如果是,对标签的访问结束;
15、如果不是,则返回6继续执行。
本发明的一实施例还提供了一种电子装置,如图7所示,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述任一项所述提取动态网页信息的方法。
本发明的一实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有信息处理程序,所述信息处理程序被处理器执行时实现上述任一项所述提取动态网页信息的方法。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其它数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其它的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其它传输机制之类的调制数据信号中的其它数据,并且可包括任何信息递送介质。
Claims (10)
1.一种提取动态网页信息的方法,包括:
确定动态网页上每个第一标签的访问路径;
访问所述动态页面的种子页,进行信息提取;
针对每个第一标签分别执行第一操作,所述第一操作包括:
根据该第一标签的访问路径访问该第一标签以触发页面变化,对变化后的页面进行信息提取;
其中,第一标签是指会触发页面变化的标签,每个第一标签的访问路径是指在所述动态网页的种子页到该第一标签之间的每层页面上需要访问的标签的索引序列组成的索引序列组合,所述动态网页的种子页是指该动态网页统一资源定位符URL对应的首页面。
2.根据权利要求1所述的方法,其特征在于,所述确定动态网页上每个第一标签的访问路径,包括:
获取所述动态网页上所有可以交互的标签,将获取的标签按照标签在页面代码中出现的页面层级和先后顺序进行索引;针对每个待确定访问路径的第一标签,分别执行如下操作:
当存在与该待确定访问路径的第一标签在同一表单中的第二标签时,获取所述第二标签的索引序列;将该待确定访问路径的第一标签的索引追加到所述第二标签的索引序列后面,得到该待确定访问路径的第一标签的索引序列;当该第一标签不存在父标签时,直接将该待确定访问路径的第一标签的索引序列作为该待确定访问路径的第一标签的访问路径;当该第一标签存在父标签时,将所得到的索引序列追加到该待确定访问路径的第一标签的父标签的索引序列的后面,得到该待确定访问路径的第一标签的访问路径;
当不存在与该待确定访问路径的第一标签在同一表单中的第二标签时,当该第一标签不存在父标签时,直接将该待确定访问路径的第一标签的索引作为该待确定访问路径的第一标签的访问路径;当该第一标签存在父标签时,直接将该待确定访问路径的第一标签的索引追加到该待确定访问路径的第一标签的父标签的索引序列的后面,得到该待确定访问路径的第一标签的访问路径;
其中,第二标签是指不会触发页面变化的标签,所述第一标签的父标签是指被访问后将触发变化跳转到该第一标签所在页面的标签。
3.根据权利要求2所述的方法,其特征在于,
每个第一标签的访问路径P如下式所示:
P=<S0,S1,...,Sk-1,Sk> (k≥0)
其中,k表示该第一标签所在页面的层级,Si表示在第i层页面需要访问的第一标签的索引序列,i取值为0到k,S0表示在种子页需要访问的第一标签的索引序列;
当存在与需要访问的第一标签在同一表单中的第二标签时,Si如下式所示:
Si=<Ni,0,Ni,1,...,Ni,m-1,Ni,m> (m≥1)
其中,Ni,m表示在第i层页面需要访问的第一标签的索引,Si中除Ni,m之外的索引为在第i层页面与需要访问的第一标签处于同一表单中的第二标签的索引;Ni,0为在第i层页面与需要访问的第一标签处于同一表单中的第一个第二标签的索引,m为大于等于1的自然数;
当不存在与该第一标签在同一表单中的第二标签时,Si如下式所示:
Si=<Ni,0>
其中,Ni,0表示在第i层页面需要访问的第一标签的索引;
所述获取所述第二标签的索引序列,包括:
将所述第一标签所在页面上所有第二标签的索引按照先后顺序进行排序得到一个或者多个第二标签组的索引序列;
当一个第二标签组的索引序列中的最大索引与该第一标签的索引Nk,m相邻且小于Nk,m,则将该第二标签组的索引序列作为与该第一标签在同一个表单中的第二标签的索引序列。
4.根据权利要求1所述的方法,其特征在于,在确定动态网页上每个第一标签的访问路径之后,该方法还包括:
按照页面层级和先后顺序依次将每个第一标签作为一个节点添加到预先设置的标签树中;
其中,所述标签树的根节点对应所述动态网页的种子页,所述根节点的每一个子节点与所述种子页上的每个第一标签一一对应,除了根节点以外,每个节点被访问时触发变化后的页面上的第一标签与该节点的子节点一一对应;
除了根节点以外的每个节点携带对应的第一标签的访问路径以及相应的操作方式,每个第一标签相应的操作方式为该标签默认的操作方式或者自定义的操作方式。
5.根据权利要求4所述的方法,其特征在于,所述针对每个第一标签分别执行第一操作,包括:
按照标签树的节点层级和先后顺序依次遍历所述标签树上除了根节点之外的每一层的每一个节点,针对遍历到的节点对应的第一标签分别执行所述第一操作。
6.根据权利要求5所述的方法,其特征在于,所述根据该第一标签的访问路径访问该第一标签以触发页面变化,包括:
判断该节点是上一个访问的第一标签对应的节点的子节点,还是兄弟节点或者兄弟节点的子节点;
当该节点是上一个访问的标签对应的节点的子节点时,对该第一标签的访问路径中的最后一个索引序列中的各个索引对应的标签依次执行相应的操作方式以触发页面变化;
当该节点是上一个访问的标签对应的节点的兄弟节点或者兄弟节点的子节点时,对该第一标签的访问路径中的每一个索引序列中每个索引对应的标签依次执行每个标签相应的操作方式以触发页面变化。
7.根据权利要求5所述的方法,其特征在于,每次访问完一个第一标签之后,该方法还包括:
判断是否满足终止条件;
当满足时,终止信息提取;
当不满足时,继续遍历下一个节点;
其中,所述终止条件包括以下一种或者多种:
访问的页面个数达到预设值;访问了所述动态网页对应网站上所有页面;访问的页面层数达到预设值;跳转到新页面,而且而且新页面的域名与所述动态网页的网站域名不同。
8.根据权利要求1所述的方法,其特征在于,所述针对每个第一标签分别执行第一操作,包括:
步骤11,将所述种子页添加到预先设置的标签树中作为根节点;将种子页作为当前页面,根节点作为当前节点;
步骤12,将当前页面中的每个第一标签分别添加到标签树中作为当前节点的一个子节点;
步骤13,判断当前页面中是否还存在未访问的第一标签,如果存在则进行步骤14;如果不存在未访问的第一标签,则判断当前节点是否为根节点,如果是根节点则结束;如果不是根节点则将上一级页面作为当前页面,将当前节点的父节点作为当前节点,返回步骤13;
步骤14,按照在当前页面中的出现顺序,对下一个未访问的第一标签进行第一操作;然后判断变化后的页面中是否存在第一标签,如果存在则将变化后的页面作为当前页面,将所访问的第一标签对应的节点作为当前节点,返回步骤12;如果不存在第一标签则返回步骤13。
9.一种电子装置,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至8中任一项所述提取动态网页信息的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有信息处理程序,所述信息处理程序被处理器执行时实现如权利要求1至8中任一项所述提取动态网页信息的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010771233.7A CN112035722B (zh) | 2020-08-04 | 2020-08-04 | 提取动态网页信息的方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010771233.7A CN112035722B (zh) | 2020-08-04 | 2020-08-04 | 提取动态网页信息的方法、装置及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112035722A true CN112035722A (zh) | 2020-12-04 |
CN112035722B CN112035722B (zh) | 2023-10-13 |
Family
ID=73583809
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010771233.7A Active CN112035722B (zh) | 2020-08-04 | 2020-08-04 | 提取动态网页信息的方法、装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112035722B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001090873A1 (en) * | 2000-05-22 | 2001-11-29 | 2Roam, Inc. | System and method for generating a wireless web page |
US20080140626A1 (en) * | 2004-04-15 | 2008-06-12 | Jeffery Wilson | Method for enabling dynamic websites to be indexed within search engines |
CN101593184A (zh) * | 2008-05-29 | 2009-12-02 | 国际商业机器公司 | 自适应地定位动态网页元素的系统和方法 |
US20100083095A1 (en) * | 2008-09-29 | 2010-04-01 | Nikovski Daniel N | Method for Extracting Data from Web Pages |
CN101957816A (zh) * | 2009-07-13 | 2011-01-26 | 上海谐宇网络科技有限公司 | 基于多页面比较的网页元数据自动抽取方法和系统 |
CN103870495A (zh) * | 2012-12-14 | 2014-06-18 | 阿里巴巴集团控股有限公司 | 用于从网站中提取信息的方法和装置 |
CN106294648A (zh) * | 2016-08-03 | 2017-01-04 | 腾讯科技(深圳)有限公司 | 一种针对页面访问路径的处理方法及装置 |
CN106775611A (zh) * | 2016-09-05 | 2017-05-31 | 中国人民财产保险股份有限公司 | 基于机器学习的自适应动态网页爬虫系统的实现方法 |
CN107423322A (zh) * | 2017-03-31 | 2017-12-01 | 广州视源电子科技股份有限公司 | 网页页面的标签嵌套层级的显示方法和装置 |
CN107832218A (zh) * | 2017-11-10 | 2018-03-23 | 平安科技(深圳)有限公司 | 动态页面中的埋点处理方法、装置和计算机设备 |
CN110659435A (zh) * | 2019-08-14 | 2020-01-07 | 平安普惠企业管理有限公司 | 页面数据采集处理方法、装置、计算机设备和存储介质 |
CN111475757A (zh) * | 2020-03-03 | 2020-07-31 | 百度在线网络技术(北京)有限公司 | 页面更新方法和装置 |
-
2020
- 2020-08-04 CN CN202010771233.7A patent/CN112035722B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001090873A1 (en) * | 2000-05-22 | 2001-11-29 | 2Roam, Inc. | System and method for generating a wireless web page |
US20080140626A1 (en) * | 2004-04-15 | 2008-06-12 | Jeffery Wilson | Method for enabling dynamic websites to be indexed within search engines |
CN101593184A (zh) * | 2008-05-29 | 2009-12-02 | 国际商业机器公司 | 自适应地定位动态网页元素的系统和方法 |
US20100083095A1 (en) * | 2008-09-29 | 2010-04-01 | Nikovski Daniel N | Method for Extracting Data from Web Pages |
CN101957816A (zh) * | 2009-07-13 | 2011-01-26 | 上海谐宇网络科技有限公司 | 基于多页面比较的网页元数据自动抽取方法和系统 |
CN103870495A (zh) * | 2012-12-14 | 2014-06-18 | 阿里巴巴集团控股有限公司 | 用于从网站中提取信息的方法和装置 |
CN106294648A (zh) * | 2016-08-03 | 2017-01-04 | 腾讯科技(深圳)有限公司 | 一种针对页面访问路径的处理方法及装置 |
CN106775611A (zh) * | 2016-09-05 | 2017-05-31 | 中国人民财产保险股份有限公司 | 基于机器学习的自适应动态网页爬虫系统的实现方法 |
CN107423322A (zh) * | 2017-03-31 | 2017-12-01 | 广州视源电子科技股份有限公司 | 网页页面的标签嵌套层级的显示方法和装置 |
CN107832218A (zh) * | 2017-11-10 | 2018-03-23 | 平安科技(深圳)有限公司 | 动态页面中的埋点处理方法、装置和计算机设备 |
CN110659435A (zh) * | 2019-08-14 | 2020-01-07 | 平安普惠企业管理有限公司 | 页面数据采集处理方法、装置、计算机设备和存储介质 |
CN111475757A (zh) * | 2020-03-03 | 2020-07-31 | 百度在线网络技术(北京)有限公司 | 页面更新方法和装置 |
Non-Patent Citations (2)
Title |
---|
ALI MESBAH等: "Invariant-Based Automatic Testing of Modern Web Applications", 《IEEE TRANSACTIONS ON SOFTWARE ENGINEERING》, vol. 38, no. 1, pages 35 - 53, XP011399004, DOI: 10.1109/TSE.2011.28 * |
高天宏: "互联网舆情分析中信息采集技术的研究与设计", 《中国优秀硕士学位论文全文数据库信息科技辑》, no. 08, pages 139 - 272 * |
Also Published As
Publication number | Publication date |
---|---|
CN112035722B (zh) | 2023-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10783324B2 (en) | Wizard for configuring a field extraction rule | |
US11769003B2 (en) | Web element rediscovery system and method | |
US9734149B2 (en) | Clustering repetitive structure of asynchronous web application content | |
CN109086204B (zh) | 节点关系树建立、页面标记和识别方法、装置和存储介质 | |
US9753909B2 (en) | Advanced field extractor with multiple positive examples | |
US20090063538A1 (en) | Method for normalizing dynamic urls of web pages through hierarchical organization of urls from a web site | |
US20170139887A1 (en) | Advanced field extractor with modification of an extracted field | |
US20160335348A1 (en) | Static-Analysis-Assisted Dynamic Application Crawling Architecture | |
US9760347B2 (en) | Method and system to identify GUI objects for non-markup-language-presented applications | |
US20220374339A1 (en) | Techniques for visual software test automation management | |
WO2012174137A1 (en) | Method and system of extracting web page information | |
US20120166480A1 (en) | Xpath-based selection assistance of gui elements during manual test script authoring for xml-based applications | |
CN102999318B (zh) | 辅助编程的方法及装置 | |
CN104572067A (zh) | 用于由源代码指定的用户界面的可视化的方法和系统 | |
US20220374334A1 (en) | Techniques for visual software test automation management | |
CN102760150A (zh) | 基于属性重现和标签路径的网页抽取方法 | |
US20230027880A1 (en) | Techniques for automated testing of application programming interfaces | |
CN113177168A (zh) | 一种基于Web元素属性特征的定位方法 | |
EP3422177A1 (en) | Systems and methods for code parsing and lineage detection | |
US20170220531A1 (en) | Identifying a functional fragment of a document object model tree | |
CN112035722B (zh) | 提取动态网页信息的方法、装置及计算机可读存储介质 | |
CN115357820B (zh) | 一种基于记录回放的数字对象封装与实体访问方法及系统 | |
CN115795193A (zh) | 页面数据提取方法、页面自动化测试方法 | |
US20230027403A1 (en) | Techniques for automated testing of application programming interfaces | |
KR102365434B1 (ko) | 컨텐츠 검색 방법 및 컨텐츠 검색 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |