一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据抓取引擎开发方法、执行方法、设备及存储介质与流程

2022-11-30 16:13:21 来源:中国专利 TAG:


1.本技术涉及数据抓取技术领域,尤其是涉及一种数据抓取引擎开发方法、执行方法、设备及存储介质。


背景技术:

2.伴随信息化发展,数据抓取,尤其是垂直数据抓取,作为系统数据集成的重要手段被广泛应用实践。
3.目前,在软件行业内,对于数据抓取功能的开发实践中,有两类代表性技术。分别是使用特定编程语言(python、java、golang等)以编码方式伪造http协议技术,和以selenium、按键精灵等为代表的委托浏览器(或浏览器内核),模拟点击、选择、录入等人类操作行为事件技术。
4.其中,伪造http协议技术常以硬编码方式组织数据抓取功能逻辑,开发模型具体划分阶段为:1.通过网络抓包分析,梳理数据抓取的需求访问逻辑;2.根据全局数据抓取访问逻辑及上下文关系,设计和编码程序访问的全局执行逻辑;3.根据局部数据抓取访问逻辑及上下文关系,设计和开发与之对应的硬编码实现,产出具体代码段或执行模块;4.进行单元测试、集成测试、系统测试,确认测试。
5.但是,该功能逻辑组织模式下存在下述问题:1.自顶向下的开发周期长,开发成本高;2.技术入门门槛高。开发者不仅要使用本领域的开发语言技术。还必须对网络抓包、协议分析、web网络安全机制等有透彻理解;3.单次抓取过程的性能,严重依赖于访问请求逻辑的分析和认知水平。由于数据抓取的目标系统往往是第三方的,在无法获取相关技术文档的条件下,只能依赖于人工交互结合抓包分析进行梳理,提取核心api和关键路径,并优化非充要请求;4.访问逻辑分析在整个开发过程中成本高昂,且成果无法复用到其他同类应用中。访问逻辑分析一般针对特定目标系统,目标系统差异导致不具备复用知识的底层逻辑;5.没有有效手段进行预先测试,难以尽早发现可行性问题和逻辑缺陷;6.需求变更适应性较差。抓取数据的目标系统访问逻辑无法掌控,由硬编码组织的全局调用执行,使变更改造牵一发动全身;7.异常排查困难。数据抓取功能业务链往往较深,不光需要依赖详细的日志埋点,还需要结合当前全局执行流程理解和抓取数据目标系统当下访问逻辑的确认;8.进行性能优化方案,尤其是基于多线程/进程的优化方案时,硬编码方式往往改造困难,也给全局流程理解和日志分析带来困扰;9.软件复用性低。因为组织流程的硬编码方案,难以套用已有的爬取逻辑流程,或复用相关局部抓取数据模块;10.实时响应能力弱。系统对抓取数据过程中触发的挂起、暂停、取消、优先级调整等事件缺乏清晰有效的解决方案,给扩展维护带来压力。
6.浏览器(内核)委托技术的开发模型具体划分阶段如下:1.分析记录人工操作逻辑;2.根据人工操作逻辑,设计和编写委托浏览器操作的相关代码;3. 单元测试、集成测试、系统测试,确认测试。
7.该功能逻辑组织模式下,虽然逻辑梳理简单,开发过程自然直接,提高开发效率和成本,但依然存在以下性能问题:1.彻底放弃细颗粒度的请求级优化,造成大量非充要网络请求;2.浏览器(内核)网络请求后,产生大量的页面渲染和javascript执行开销,而相关模拟操作也会额外进行脚本开销;3.由于委托浏览器(内核)方式稳定性差、动态响应交互性差,开发实践中,往往需要加入大量延时,弥补稳定性和容错率问题;4.串行化的模拟操作流程,使多任务并发优化几乎失去可行性。即使采用进程隔离或集群方案,但任务级贯穿整个请求流程,颗粒度过大。优化效果和付出的算力成本相比,性价比过低。尤其在涉及到资源竞争的条件下(如单用户特定api独占等),过大的颗粒度也造成无法并行的结果;5.任务间难以共享资源。无论在并行或串行任务间,已获取的资源(会话、先验结果、令牌资源等),都难以在委托浏览器方式中得到复用,其本质上是因为浏览器(内核)接口局限性造成的数据交互差异。
8.浏览器(内核)委托技术并没有解决伪造http协议技术的部分缺陷:1.实时响应能力弱。系统对抓取数据过程中触发的挂起、暂停、取消、优先级调整等事件缺乏清晰有效的解决方案,甚至受限于浏览器(内核)控制权限,不具备相关操作的可行性,给扩展维护带来更大压力;2.异常排查困难。由于浏览器(内核)在委托调用后执行大量黑箱操作,网络请求、渲染环境、dom结构、javascript等执行过程存在大量常规技术难以跟踪观察的行为,给问题的定位带来阻力。
9.除了上述问题,浏览器(或浏览器内核) 委托技术还存在cpu资源占用过高、执行容错性差等问题。因此大型商用实践中,往往放弃该技术方案。


技术实现要素:

10.为了解决上述至少一种问题,本技术提供一种数据抓取引擎开发方法、执行方法、设备及存储介质。
11.第一方面,本技术提供一种数据抓取引擎开发方法,采用如下的技术方案:一种数据抓取引擎开发方法,包括:获取不同维度的数据作为录制访问样本,所述不同维度的数据包括浏览器操作行为数据和http请求数据;基于黑板系统和http回放技术对所述录制访问样本进行推导,获取请求访问目标的最优访问推导信息,其中,所述最优访问推导信息包括最优路径、所述最优路径的最优参数集和最优参数因果路径;基于所述最优访问推导信息,构建行为树,生成表征所述行为树和状态机的dsl文件;
通过对所述dsl文件进行词法、语法分析,识别所述行为树的节点中待生成代码的目标行为节点,对所述目标行为节点进行代码生成。
12.可选的,所述基于黑板系统和http回放技术获取请求对所述录制访问样本进行推导,访问目标的最优访问推导信息包括:将所述录制访问样本导入黑板系统,作为当前共享知识;为所述黑板系统选取多个知识源;使每个知识源基于先验知识对所述当前共享知识进行推导,得到先验结果,将所述先验结果中的所述请求访问目标的最优路径、所述最优路径的最优参数集和最优参数因果路径进行http重放测试,得到新的共享知识,将新的共享知识导入所述黑板系统,并将所述新的共享知识作为所述当前共享知识;重复所述使每个知识源基于先验知识对所述当前共享知识进行推导,得到先验结果的步骤,直到所有知识源对当前共享知识的推导不再产生新的先验结果,最新的先验结果中的所述请求访问目标的最优路径、所述最优路径的最优参数集和最优参数因果路径即为所述请求访问目标的最优访问推导信息。
13.可选的,所述基于所述最优访问推导信息,构建行为树,生成表征所述行为树和状态机的dsl文件包括:基于所述最优路径构建双层行为树,所述双层行为树的顶层节点包括一控制节点,第二层节点均为访问行为节点;基于所述最优参数集,在所述访问行为节点的父级扩展数据处理行为节点;基于所述最优参数因果路径,对所述数据处理行为节点进行垂直展开,再加入控制节点,进行同步水平扩展;采用前序遍历的方式,从根节点开始,参照dsl词法表推导出dsl文法结构,得到所述dsl文件。
14.可选的,在所述通过对所述dsl文件进行词法、语法分析,识别所述行为树的节点中待生成代码的目标行为节点,对所述目标行为节点进行代码生成之前,还包括:提供人工介入调整所述行为树的入口;所述通过对所述dsl文件进行词法、语法分析,识别所述行为树的节点中待生成代码的目标行为节点,对所述目标行为节点进行代码生成包括:通过对所述dsl文件进行词法、语法分析,识别dsl声明的行为节点是否存在语法异常;若是,则中断代码生成过程,并生成提示消息,用以提示人工介入修改;若否,则利用模板技术对所述dsl声明的未引用实现的行为节点进行实现代码生成;将生成的代码文件落盘至指定代码路径,并根据获取的dsl定义语句位置更新补全定义语句。
15.可选的,所述利用模板技术对所述dsl声明的未引用实现的行为节点进行实现代码生成包括:识别所述行为节点的类型及相关属性;基于所述行为节点的类型和相关属性从模板库中检索并调取主逻辑模板;
基于所述黑板系统检索所述行为节点的相关参数;基于所述主逻辑模板和所述相关参数进行主业务逻辑的代码生成;从所述模板库调取所述主逻辑模板所关联的aop模板集合;基于所述aop模板集合中的aop模板和所述相关参数进行aop业务逻辑的代码生成。
16.第二方面,本技术提供一种数据抓取引擎执行方法,采用如下的技术方案:一种数据抓取引擎执行方法,包括:响应于外部事件,计算行为树的当前行为节点的权重;基于所述当前行为节点的权重以及所述当前行为节点的后续行为节点的权重,生成所述当前行为节点的优先级数值;基于所述当前行为节点的优先级数值更新任务队列;基于更新后的任务队列,对所述行为树的节点执行进行调度。
17.可选的,所述当前行为节点的权重的计算公式为:;式中,为所述当前行为节点的权重;为所述当前行为节点第次执行的节点运行时间,其中,,≥1且为整数;为所述当前行为节点已执行的次数,其中,≥1且为整数。
18.可选的,在所述响应于外部事件,计算行为树的当前行为节点的权重之前,还包括:检查黑板系统中是否存在初始化的行为树;若是,则对所述行为树的上下文信息进行初始化;若否,则利用dsl文件还原所述行为树。
19.可选的,所述利用所述dsl文件还原所述行为树包括:扫描所述dsl文件;根据dsl词法表构造有穷状态机,通过所述有穷状态机解析所述dsl文件,得到词法token流;根据dsl语法表构造语法分析器,对所述词法token流顺序遍历,载入所述语法分析器中进行语法检查,清理无语义token;采用逆波兰后缀表达式方式,通过双堆栈逐行构造抽象语法树;对所述抽象语法树进行执行,在执行过程中翻译成内存中所述行为树的节点。
20.第三方面,本技术提供一种数据抓取引擎开发装置,采用如下的技术方案:一种数据抓取引擎开发装置,包括:样本获取模块,用于获取不同维度的数据作为录制访问样本,所述不同维度的数据包括浏览器操作行为数据和http请求数据;最优访问推导模块,用于基于黑板系统和http回放技术对所述录制访问样本进行
推导,获取请求访问目标的最优访问推导信息,其中,所述最优访问推导信息包括最优路径、所述最优路径的最优参数集和最优参数因果路径;dsl生成模块,用于基于所述最优访问推导信息,构建行为树,生成表征所述行为树和状态机的dsl文件;代码生成模块,用于通过对所述dsl文件进行词法、语法分析,识别所述行为树的节点中待生成代码的目标行为节点,对所述目标行为节点进行代码生成。
21.第四方面,本技术提供一种数据抓取引擎执行装置,采用如下的技术方案:一种数据抓取引擎执行装置,包括:权重计算模块,用于响应于外部事件,计算行为树的当前行为节点的权重;优先级生成模块,用于基于所述当前行为节点的权重以及所述当前行为节点的后续行为节点的权重,生成所述当前行为节点的优先级数值;队列更新模块,用于基于所述当前行为节点的优先级数值更新任务队列;调度模块,用于基于更新后的任务队列,对所述行为树的节点执行进行调度。
22.第五方面,本技术提供一种电子设备,采用如下的技术方案:一种电子设备,包括存储器和处理器;所述存储器上存储有能够被所述处理器加载并执行第一方面、第二方面任一项所述的方法的计算机程序。
23.第六方面,本技术提供一种计算机可读存储介质,采用如下的技术方案:一种计算机可读存储介质,存储有能够被处理器加载并执行第一方面、第二方面任一项所述的方法的计算机程序。
24.通过采用上述技术方案,提供一种新的全流程数据爬取引擎框架,提出一种基于该引擎的全新数据抓取(开发)方法,可解决开发周期长、请求逻辑分析难、代码编写成本高、性能优化繁琐困难、代码可维护性和复用性差等问题。
附图说明
25.图1是本技术实施例的一种数据抓取引擎开发方法的流程示意图。
26.图2是本技术实施例的一种数据抓取引擎开发方法的步骤s102的子步骤流程示意图。
27.图3是本技术实施例的知识源状态流转的示意图。
28.图4是本技术实施例的一种数据抓取引擎开发方法的步骤s103的子步骤流程示意图。
29.图5至图7是本技术实施例的行为树构建过程中的树结构的示意图。
30.图8是本技术实施例的一种数据抓取引擎执行方法的流程示意图。
31.图9是本技术实施例的各个节点实现状态机控制的示意图。
32.图10是本技术实施例的数据抓取引擎开发装置的结构框图。
33.图11是本技术实施例的数据抓取引擎执行装置的结构框图。
34.图12是本技术实施例的电子设备的结构框图。
具体实施方式
35.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例
中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。
36.从是否存在特定的抓取数据标的角度,数据抓取领域可分为通用型和垂直型。前者适用于搜索引擎的海量信息获取以及数据挖掘、大数据分析以前的海量无特定规则逻辑的样本数据获取;而后者倾向于存在明确抓取标的、存在特有请求逻辑的业务场景。本技术实施例适用的应用场景是存在明确数据标的和特定访问逻辑的垂直型数据抓取需求场景。
37.图1为本技术实施例提供的一种数据抓取引擎开发方法的流程示意图。如图1所示,该方法的主要流程描述如下(步骤s101~s104):步骤s101,获取不同维度的数据作为录制访问样本,不同维度的数据包括浏览器操作行为数据和http请求数据;步骤s102,基于黑板系统和http回放技术对录制访问样本进行推导,获取请求访问目标的最优访问推导信息,其中,最优访问推导信息包括最优路径、最优路径的最优参数集和最优参数因果路径;步骤s103,基于最优访问推导信息,构建行为树,生成表征行为树和状态机的dsl文件;步骤s104,通过对dsl文件进行词法、语法分析,识别行为树的节点中待生成代码的目标行为节点,对目标行为节点进行代码生成。
38.步骤s101中,浏览器操作行为数据包括捕获关注事件的触发时间、捕获关注事件的触发类型(例如click、change等)、捕获关注事件触发前后html、捕获关注事件事件源、捕获关注事件触发时剪切板数据、捕获关注事件触发坐标、捕获关注事件源的dom层级结构等数据。http请求数据包括http请求时间、http 请求报文、http 请求的响应时间、http请求的响应报文等数据。
39.开发人员需要在开发机上安装引擎配套的chrome插件(例如在开源tampermonkey中写相关录制脚本)和http监听插件(例如golang开发的http代理程序)并启用,按照正常的操作逻辑,进行网络访问。通过两组插件,分别得到两组不同维度的数据,分别是记录浏览器操作过程中的行为数据和网络访问数据,两组数据在时空上存在关联,于是得到一组录制访问样本。
40.多次执行该过程(一般2~3次),得到多组录制访问样本。多组访问样本在行为逻辑上存在关联,但在时空维度存在差异。
41.本实施例同时采集http请求和动作行为这两个维度数据样本(http请求的时间分布和操作行为的时间分布),并为这种原始样本增加数据发掘过程,得到隐式访问规则(细颗粒度的核心http访问逻辑)的方案。
42.步骤s102中,采用了一种推导最优路径和可变参数因果关系的求解模型。首先,解释本实施例中求解模型所期待解决的问题空间。
43.在数据抓取开发领域,一个请求对另外请求存在因果关系时,记作y=f(x),当x请求不存在,y的合理请求不能得到正确结果,记作x请求是y请求的充要条件。如果存在x=f(a),即请求a是请求x的充要条件,则必然存在y=f(a),记作请求a是请求y的充要条件。
44.在目标数据爬取问题中,要实现目标请求a,必然存在请求域w,使得域w的每个元素(a1,a2,a3...an),存在a=f(an)。此时,记作请求域w是请求a的最优路径。
45.同理,请求a必然存在一个请求参数域y,使得y的每个元素(b1,b2,b3...bn),存在
a=f(bn)。此时,记作参数域y是请求a的最优参数集,域y中每个元素记作请求a的最优参数。
46.如果请求参数bn的获取依赖请求c,即bn=f(c),则说明请求c和参数bn存在因果关系。此时c的最优路径w{c1,c2,c3...cn},必然存在bn=f(cn),记作请求c的最优参数因果路径。
47.需要注意的是,最优参数因果路径并非最优路径的子集,因为请求a的最优参数b的最优因果路径w{c1,c2,c3...cn}可能存一个cn,使得a!=f(cn)。这为行为树的执行优化提供重要理论基础。
48.因此,本实施例的求解模型的解空间为:获取数据抓取领域的请求访问目标的最优路径、最优路径中的最优参数集以及最优参数因果路径。通过程序配合黑板系统的求解模型,全自动的推导出最优访问逻辑。
49.作为本实施例的一种可选实施方式,如图2所示,步骤s102包括以下子步骤:步骤s1021,将录制访问样本导入黑板系统,作为当前共享知识;步骤s1022,为黑板系统选取多个知识源;步骤s1023,使每个知识源基于先验知识对当前共享知识进行推导,得到先验结果,将先验结果中的请求访问目标的最优路径、最优路径的最优参数集和最优参数因果路径进行http重放测试,得到新的共享知识,将新的共享知识导入黑板系统,并将新的共享知识作为当前共享知识;重复步骤s1023,直到所有知识源对当前共享知识的推导不再产生新的先验结果,最新的先验结果中的请求访问目标的最优路径、最优路径的最优参数集和最优参数因果路径即为请求访问目标的最优访问推导信息。
50.本可选实施方式中,系统获得的多组录制访问样本将自动保存在本地宿主机中,在引擎中首先指定主题,在该主题下指定样本路径,使得样本载入黑板系统,成为初始共享知识。初始共享知识包括但不限于http请求的方法信息、传递参数、请求的响应、header信息以及时间维度上的服务器平均响应时间等数据。
51.黑板系统为具有黑板模型的专家系统,黑板模型是一种专家系统结构模式。需要对黑板系统进行初始化,初始化过程的核心任务就是为黑板系统选配备选知识源,引擎会将选取的知识源的对应控制器,自动注册到该黑板系统中。
52.例如,对于app类的应用,可能在录制样本时不兼容行为维度的录制,此时,就需要放弃行为时间分析知识源、行为分类知识源、行为中断知识源等,同时增加时间间隔维度分析源等相关知识源。又如,在涉及验证码的问题场景中,需要增加断言知识源或会话欺骗分析知识源、验证码位置推测知识源等。
53.知识源可理解为一种数据挖掘的处理器,对知识(数据源)经过控制器的提取、加工,得到结论并发布到黑板系统。
54.推导过程中,知识源状态流转如图3所示,每个知识源都开始(顺序/并发)的从控制器中接受关注的数据。对本领域数据进行推导加工,得到结果域w。结果域基于先验知识的推导,并通过控制器control更新到黑板系统中。在此过程中,知识源的状态将随先验知识的更新,结果推导,发生转换。当一轮推导结束,应保证所有知识源处于watch状态中。
55.当知识源结束推导后,一般会有两种结果,一种是产生新的先验结果,需要通知黑板系统更新先验知识,另一种是没有产生新的先验结果,这些结果都会通过例如消息队列、
websocket等方式通知给黑板系统。
56.在一轮推导中,通过某些知识源的推导,触发黑板系统,黑板系统再通知其他知识源。
57.当一轮推导结束,应更新黑板系统,基于先验结果得到的最优路径、最优路径参数、最优路径最优参数、最优参数因果路径进行http请求的重放,并记录相应请求和交互结果。经过http重放测试过程,得到新的共享数据,把此共享数据导入黑板系统,同时在堆栈中记录请求参数过程,为知识源的推论过程判定打标签,便于回溯。
58.而当一轮推导结束后,得到的先验结果集中最优路径、最优路径参数、最优路径最优参数、最优参数因果路径不再有更新时,终止http重放测试环节。也就是说,结束系统推导的条件是所有知识源对最新的共享知识做出推导完毕,并不再有更新先验结果。
59.本实施例中,知识源推导的结果未必正确,因此通过http回放来进行校验的,所以推导的共享知识存在状态(已验证、未验证),http回放校验后,对共享知识(包含知识的状态)进行更新。
60.使用黑板系统,利用数据发掘技术推导规则,并通过http回放技术对先验结果进行多轮迭代,回归测试。通过多轮推导,触发黑板系统的知识源对解空间的多轮更新、校验、确认。
61.作为本实施例的一种可选实施方式,如图4所示,步骤s103包括以下子步骤:步骤s1031,基于最优路径构建双层行为树,双层行为树的顶层节点包括一控制节点,第二层节点均为访问行为节点;步骤s1032,基于最优参数集,在访问行为节点的父级扩展数据处理行为节点;步骤s1033,基于最优参数因果路径,对数据处理行为节点进行垂直展开,再加入控制节点,进行同步水平扩展;步骤s1033中,控制节点可以包括async控制节点、if控制节点、or控制节点、and控制节点和serial控制节点中的至少一种;步骤s1034,采用前序遍历的方式,从根节点开始,参照dsl词法表推导出dsl文法结构,得到dsl文件。
62.步骤s103中,本实施例定义了一种用于表征行为树和状态机且图灵完备的dsl,是描述数据抓取整体逻辑的表述性领域特定语言,可以简单清晰地表征全局调度执行逻辑。
63.该语言词法表中,控制算法本身被表示为节点,并声明关键字(while、if、else 、end 、async、goroutine、state、{、}、!、=、:、|),通过"::"来声明行为节点,通过“:”调用行为节点,并把行为节点视为一种资源,可以通过“[[ ]]”定义共享资源,通过“(())”定义竞争资源。同时async提供异步调用元语,goroutine提供并发协成元语,state提供状态转换元语。
[0064]
根据某些请求访问逻辑(无论是否进行上述最优访问推导),自动生成行为树来定义请求逻辑,并生成dsl文件。本质上,是请求模型到为行为模型的自动转换过程。
[0065]
通过黑板系统的数据挖掘得到的是一组请求链。从结构上来说,请求链可以是顺序的,也可以是局部并发的。每个请求一般都有入参,因此就需要一个参数的提取过程。通常,当前请求的参数是由上一个请求或上n个请求的返回响应中得到的,因此就存在了行为的逻辑顺序。这些逻辑顺序需要考虑串行和并发,而控制这些逻辑顺序就需要由控制节点
来承载。
[0066]
控制节点和行为节点是组成行为树的最基本单元。首先,根据先验知识,提取出核心的访问行为节点,构建一棵双层树,如图5所示,树的顶层为一控制节点serial,树的第二层均为访问行为节点url1、url2、url3。这是构建行为树的第一步。
[0067]
此时行为树是不完整的,其缺少两个部分。一是控制阶段反应行为的串行、并发、循环、分支逻辑;二是参数提取的行为节点,使访问请求节点获得正确的参数。因此,构建行为树的第二步,就是补充数据处理(参数提取)的行为节点。由于参数获取和下一步的访问存在因果关系,因此可以把当前的树(双层树)向高层进行展开补全数据处理行为节点dodata1、dodata2和dodata3,如图6所示。
[0068]
此时,行为树已经可以基本运行,但只表征了一种状态:整个逻辑串行执行,并且没有异常的发生。但现实是,网络并不可靠,部分节点遇到特定类型错误(如超时、500)时,需要循环重试;遇到特定类型错误(如404或304,或识别出权限错误)时,需要果断终止行为树的流转。因此,第三步就是通过补全控制节点,补全这些逻辑。
[0069]
在第三步时,通过继续增加控制节点,使得树的形态继续向垂直方向展开。为了要体现出终止、分支等逻辑,因此会在第二层上进行控制节点的分叉,树就在第三层~第n层中进行水平的展开,来完成相应的逻辑体系,如图7所示。
[0070]
本实施例中,不同于or、and、serial这些基础控制节点,async体现了异步请求逻辑,该控制节点无需等待行为节点的访问,可直接访问true给上级的控制节点,使得数据爬取领域的某些页面不需要每次都请求,只需获取相关的请求参数即可,而请求参数的变化周期并不大,可以基于以前的先验知识,通过异步的方案,获取该请求参数的有效性。这是整个行为树存在异步请求的一个内在因素。
[0071]
另一个驱动因素是数据加工和入库的行为逻辑。通常,这些数据处理逻辑和其他请求访问,并不存在先后因果关系,而存在异步的可能。
[0072]
由于请求逻辑因为存在明显的顺序、分支、循环逻辑,因此需要在行为树这一数据结构中进行体现。而构建行为树的总体思路是,先骨架,再细节;先串行,再并发;先行为节点,再控制节点。在先增加行为节点的过程中,树垂直展开;在添加控制节点的过程中,树转置,先垂直展开,再水平展开,此时树回缩。
[0073]
对于步骤s102生成的表征行为树和状态机的dsl文件,其是基于专家系统问题空间的解空间生成的,并未涉及并发任务需求,共享资源和竞争资源的定义,没有最大限度的保证并发任务过程中行为树的最细颗粒度分解和最大效能优化。因此,对于工业级软件产品需求来说,此过程可通过本实施例提供的dsl,进行总体调度的二次定义开发,尤其是对于没有限制单用户登录的业务场景中,定义登录会话为共享资源,将极大地改善系统并发性。同时,本实施例的dsl元语中,默认访问行为节点是非竞争资源,对于单会话访问api竞争的情况,必须通过dsl定义对应行为节点为竞争资源。
[0074]
由于定义了dsl并自动生成到本地,因此,本实施例提供人工介入调整行为树的入口,使得开发人员可以在此介入,调整自动生成全局行为逻辑,显著增加了可维护性和复用性(复用dsl的行为树定义)。
[0075]
本实施例将软件行业内代码生成常规解决方案(通过领域模型一次性生成代码)创新性的拆分成三阶段——全局行为定义生成阶段(步骤s103)、人工介入调整行为树阶段
和行为节点生成实现类阶段(步骤s104)。将人工介入调整行为树阶段设置在全局行为定义生成阶段之后,行为节点生成实现类阶段之前。每个阶段都可以根据黑板系统的先验知识和前一个阶段的产物,完成本阶段任务。
[0076]
为了配合人工介入调整行为树阶段,本实施例根据dsl定义的模型,自动生成没有对应行为节点的底层代码实现。
[0077]
在人工介入调整行为树后,先需要通过对dsl文件进行词法、语法分析,识别dsl声明的行为节点是否存在语法异常,判断声明引用是否完整,例如定义不全、没有引用有效的现实类等。
[0078]
若存在语法异常,则中断代码生成过程,并标识出错误行,生成提示消息,用以提示人工介入修改;若不存在语法异常,则利用模板技术对dsl声明的未引用实现的行为节点进行实现代码生成,将生成的代码文件落盘至指定代码路径,并根据获取的dsl定义语句位置更新补全定义语句,具体的,通过先验知识中最优路径参数和最优参数因果路径,补充模板中相关参数的引用。
[0079]
对于实现代码生成,本实施例是采用模板方法实现的。具体的,系统通过freemarker 预先定义了一组数据处理行为节点范式(参数抽取逻辑)和一组访问行为节点范式。
[0080]
首先,识别行为节点的类型及相关属性,基于行为节点的类型和相关属性从模板库中检索并调取主逻辑模板;并基于黑板系统检索行为节点的相关参数。
[0081]
然后,基于代码生成模板和相关参数进行主业务逻辑的代码生成;并从模板库调取主逻辑模板所关联的aop模板集合;基于aop模板集合中的aop模板和相关参数进行aop业务逻辑的代码生成。
[0082]
需要说明的是,一个行为节点生成几种aop业务逻辑的代码,取决于主逻辑模板关联检索到的aop模板有几个。
[0083]
本实施例中,自动生成的访问行为节点应具备网络的请求核心逻辑以及日志记录、状态跟踪、通过控制器更新黑板系统的逻辑。为了不使二次开发人员对生成的代码理解产生困扰,保证单一职责原则,采用aop技术完成日志记录、状态跟踪和更新数据源逻辑,通过cglib为java词法元语级别提供了均匀分布的埋点。生成主逻辑代码和增强通知逻辑的aop代码可以保证核心逻辑的简洁及语义清晰。
[0084]
需要说明的是,为了追求可维护性,需要将状态跟踪和更新数据源逻辑这些非核心逻辑单独生成代码。而aop是一种面向切面的编程思想,它利用例如动态编织、运行时修改、委托代理、生成代码等技术,将一些通用性功能(例如记录日志、更新节点状态,通知黑板系统等)或者非核心业务逻辑(例如对于一访问节点,访问请求、参数处理是核心业务逻辑,而记录日志、保存状态和记录请求时间等是非核心业务逻辑)单独提取出来,执行时能整合到核心业务逻辑之中,但又不修改原始业务逻辑代码,这样代码更清晰。因此,一个行为节点所生成的代码通常分为两部分:业务核心代码和从切面视角作为业务补充的aop代码。
[0085]
另外,控制节点的代码一般是预先准备好的实现,无需生成,组装即可。
[0086]
上述引擎定义阶段是一次性的,无需随后续的引擎执行阶段再次调用,再通过测试环节,就基本完成了数据抓取的功能开发。
[0087]
本实施例提供了数据抓取领域的一种创新性的形式化开发方法,基于先验知识推导生成最终软件产品的形式化开发模型。其先按照业务逻辑,进行浏览器或app操作,实现多次访问逻辑的录制,再触发调用引擎的模型生成,提供可选自定义行为节点、调整行为树过程,调用生成代码实现,最后可直接进行系统测试、确认测试。由于引擎通过先验知识和数学推导验证了可行性,并由程序生成代码,引擎通过自动生成的行为树表征组织调用,因此基本上无需进行单元测试和集成测试。
[0088]
该模型以黑板系统推导请求行为的先验结果和相关知识模型为依据,通过自动生成dsl文件,实现全局调度结构化顶层定义;通过自动生成行为节点、控制节点、装饰节点的代码实现,实际局部底层定义。应用该开发模型,使开发阶段可以几乎不进行代码编写。
[0089]
针对上述数据抓取引擎开发方法,本技术实施例还提供一种数据抓取引擎执行方法。如图8所示,该方法的主要流程描述如下(步骤s201~s204):步骤s201,响应于外部事件,计算行为树的当前行为节点的权重;步骤s202,基于当前行为节点的权重以及当前行为节点的后续行为节点的权重,生成当前行为节点的优先级数值;步骤s203,基于当前行为节点的优先级数值更新任务队列;步骤s204,基于更新后的任务队列,对行为树的节点执行进行调度。
[0090]
本技术实施例定义了一种响应式的任务队列,以实现并发执行行为树过程,动态调整并发任务的节点优先级的调度。以调用时效性和最终行为时效性模型为基础,转化为定量的权重指标,指导调度优先级设计。
[0091]
本实施例中,根据上述数据抓取引擎开发方法构造出的行为树,实例化root节点对象,该对象保留了行为树对应节点的引用,因此在执行结束后,可以根据返回结果找到下一个节点并执行该节点。
[0092]
行为树执行过程中,通过根节点进行前序遍历,依次调用节点,依据不同节点,依次调用子节点及自身并返回。由于每个节点都实现一致的接口定义(或者通过适配器实现接口),因此可以调用统一的接口方法,触发节点的执行。控制节点和装饰节点负责处理子节点返回的结果。结果状态定义为success和failure。控制节点或装饰节点根据子节点的结果状态,执行相应控制逻辑。
[0093]
节点调用过程即为任务执行过程,节点执行至根节点返回,即为任务执行结束。体现任务的顺序、分支、循环、异步等单任务(单行为树)串行执行逻辑;同时,执行过程中响应外部事件和内部更新状态,同步更新权重及队列中的优先级。
[0094]
在整个行为树执行过程中,各个节点的执行结果,都通过控制器更新到黑板系统中。同时,各个节点都实现状态机控制,如图9所示,在节点初始化后,刚加入任务队列时,节点将处于wait状态,等待队列调用;当黑板系统触发新的共享数据时,控制器会根据共享数据,修改节点权重,相应任务队列会根据队列任务的优先级,响应式地改变节点队列顺序;当任务队列调用该节点时,节点状态将由wait转换为running,同时,wait状态还可以根据系统参与者触发的事件,转换为pause和stop状态,并且在running、pause状态下,也将响应中断、取消等事件。在不同状态下,状态转换函数将修改节点在队列中的权重、从队列中剔除、释放竞争资源等。
[0095]
在竞争资源时,通过pv操作黑板系统,在任务队列中处于running状态的节点,获
取p操作失败后,将自身状态转换为pause,等待队列,直到竞争资源释放 (p》0),而不是挂起线程,不产生线程下文切换开销。
[0096]
作为本实施例的一种可选实施方式,当前行为节点的权重的计算公式为:公式(1);公式(1)中,为当前行为节点的权重;为当前行为节点第次执行的节点运行时间,其中,,≥1且为整数;为当前行为节点已执行的次数,其中,≥1且为整数。
[0097]
如果一个行为节点距离终止节点越近,它要执行的行为节点数就越少,如果单节点耗时越少,它的多次均方根就越小,这样一个节点距离执行完毕所需要的最多时间权重即可计算得出。
[0098]
如果一个节点响应了优先级调整指令或者响应了暂停指令,后续行为节点的权重就会调整。
[0099]
如果一个竞争资源在中间节点,被其他任务树执行后缓存,该竞争资源的权重就会降低。
[0100]
如果一个行为节点从暂停到激活,即从等待队列到任务队列,在任务队列中等待,就会重新计算其后续行为节点的权重。
[0101]
需要说明的是,如果行为树的一个行为节点执行完毕,其权重必然更新,因为该行为节点不再需要耗时,其权重就记为0;如果其他任务执行了该行为节点,某些节点资源定义为共享资源,通过黑板系统共享,也会将该行为节点的权重记为0,以免影响利用这些共享资源的其他行为节点的权重。
[0102]
步骤s202中,可以将当前行为节点与其后续行为节点的权重进行加权计算,得到当前行为节点的优先级数值。
[0103]
当前行为节点的后续行为节点的权重依次为p1、p2
……
pn,其中,非竞争资源状态下,异步节点分支权重对主树为0;竞争资源状态下,异步节点分支权重对主树为n个异步节点中最大值的权重。将p1
……
pn累加,得到当前行为节点的优先级数值。优先级数值越小,优先级越高。
[0104]
需要说明的是,行为树的多分支会有多个执行路径,因此,对于一具有分支路径的当前行为节点,每一分支路径均会计算出一权重累加值,选取其中的最大值作为当前行为节点的优先级数值。
[0105]
行为节点的权重越低,代表可以更短时间完成,从多线程/进程性能优化的角度上,就越应该优先执行该行为节点,因此,行为节点的权重越低,其优先级越高。
[0106]
优先级数值越低,代表越接近行为树运行终态。而终态的数据处理行为节点往往是本地化入库,可以异步执行,因此优化机会更高,使整个行为树的吞吐量期望接近1/

t,其中,

t为最大权重节点所消耗的时间,使线程资源有限的状态下,近似于流水线。
[0107]
在初次通过黑板系统推导先验知识时,相关知识源就通过上述公式(1)计算时间维度上行为节点的权重,并储存在黑板系统中。随后,在每次引擎执行阶段,都会统计该行
为节点的权重,并通过控制器更新到黑板系统中。在同类行为节点实例化后,会根据行为节点的权重,转换成优先级,保存到上下文中。
[0108]
作为本实施例的一种可选实施方式,在步骤s201之前,还需要检查黑板系统中是否存在初始化的行为树;若是,则对行为树的上下文信息进行初始化;若否,则利用dsl文件还原行为树。
[0109]
在外部参与者或系统内部上层服务调用引擎时,首先通过任务获取绑定的主题,然后映射到dsl行为树表征。通过该表征,检查黑板系统中是否有已经初始化的行为树。若存在,则进行下一过程;若不存在,则进入dsl还原行为树阶段。
[0110]
行为树定义了任务流程规则,其作为一套决策机制存在。而实际执行的任务,通常需要关联一组业务相关数据,实现特定任务场景。
[0111]
在获取行为树后,需要初始化上下文信息。该行为过程默认由代码生成模块依据先验知识中的最优参数集,生成默认参数逻辑。另外,决策树运行状态中,各节点理论上都可以动态更改上下文信息。从语义逻辑上,这一过程在数据处理行为节点更为合适。而且,业务场景中存在同名不同值的可能性。因此,在生成各数据处理行为节点实现时,加入了更改上下文,赋予默认值的逻辑。同时,上下文中的初始化默认参数,使用了堆栈的数据结构,以实现重复调用或递归调用时的数据跟踪。
[0112]
本可选实施方式中,可以按照以下方法步骤还原行为树:扫描dsl文件至内存;然后根据dsl词法表构造有穷状态机,通过有穷状态机解析dsl文件,得到词法token流;根据dsl语法表构造语法分析器,对词法token流顺序遍历,载入语法分析器中,通过判断终止状态进行语法检查,同时清理无语义token;再采用逆波兰后缀表达式方式,通过双堆栈逐行构造抽象语法树ast;对抽象语法树ast进行执行,并记录表达式的行号,在执行过程中翻译成内存中行为树的节点。
[0113]
不同于传统硬编码定义全局行为逻辑方式,本实施例通过dsl语言还原出内存中的行为树,再根据行为树模型表征行为逻辑,推动任务的完成。
[0114]
本实施例公开了一种行为树引擎并发调度算法。以pv算法、状态机转换、领域行为节点先验知识和响应式优先队列为基础,其本质是通过各种优先级规则的动态调整以及自定义的响应式调度队列,来及时响应外界事件,改变多颗行为树的执行顺序和当前节点行为,通过对数据抓取领域中竞争资源和共享资源定义,优化并发性能。不同于一般方案中是代码写死的调用逻辑,本实施例利用行为树模型组织调用,且不同于一般的单线程执行的行为树,本实施例提供一种多线程解决方案。
[0115]
任务响应外部事件或遇到资源竞争等待时,可挂起自身,加入竞争资源对应的等待队列;在竞争资源释放后,由引擎将等待队列重新加入任务队列,并且被挂起的行为节点再次执行时,不会从行为树的root节点开始,而是在排队获取线程资源时,从上次执行到的节点位置,计算出优先级。
[0116]
本实施例的任务队列运行场景体现的是多任务(多行为树)的任务调度或单颗行为树的异步节点的并行任务调度,不会更改单颗行为树的串行执行逻辑和顺序。权重会影响当前任务(行为树)的优先级,但不会影响一棵树中节点的串行执行逻辑。队列中一个任务代表一颗行为树(虽然加入队列的只是行为节点,但是节点的遍历即为任务的执行过程)。同时,调度系统被设计为非抢占式的。
[0117]
图10为本技术实施例提供的一种数据抓取引擎开发装置300的结构框图。如图10所示,该数据抓取引擎开发装置300主要包括:样本获取模块301,用于获取不同维度的数据作为录制访问样本,不同维度的数据包括浏览器操作行为数据和http请求数据;最优访问推导模块302,用于基于黑板系统和http回放技术对录制访问样本进行推导,获取请求访问目标的最优访问推导信息,其中,最优访问推导信息包括最优路径、最优路径的最优参数集和最优参数因果路径;dsl生成模块303,用于基于最优访问推导信息,构建行为树,生成表征行为树和状态机的dsl文件;代码生成模块304,用于通过对dsl文件进行词法、语法分析,识别行为树的节点中待生成代码的目标行为节点,对目标行为节点进行代码生成。
[0118]
作为本实施例的一种可选实施方式,最优访问推导模块302具体用于将录制访问样本导入黑板系统,作为当前共享知识;为黑板系统选取多个知识源;使每个知识源基于先验知识对当前共享知识进行推导,得到先验结果,将先验结果中的请求访问目标的最优路径、最优路径的最优参数集和最优参数因果路径进行http重放测试,得到新的共享知识,将新的共享知识导入黑板系统,并将新的共享知识作为当前共享知识;重复使每个知识源基于先验知识对当前共享知识进行推导,得到先验结果的步骤,直到所有知识源对当前共享知识的推导不再产生新的先验结果,最新的先验结果中的请求访问目标的最优路径、最优路径的最优参数集和最优参数因果路径即为请求访问目标的最优访问推导信息。
[0119]
作为本实施例的一种可选实施方式,dsl生成模块303具体用于基于最优路径构建双层行为树,双层行为树的顶层节点包括一控制节点,第二层节点均为访问行为节点;基于最优参数集,在访问行为节点的父级扩展数据处理行为节点;基于最优参数因果路径,对数据处理行为节点进行垂直展开,再加入控制节点,进行同步水平扩展;采用前序遍历的方式,从根节点开始,参照dsl词法表推导出dsl文法结构,得到dsl文件。
[0120]
作为本实施例的一种可选实施方式,该装置还包括入口提供模块,用于在通过对dsl文件进行词法、语法分析,识别行为树的节点中待生成代码的目标行为节点,对目标行为节点进行代码生成之前,提供人工介入调整行为树的入口;代码生成模块304具体用于通过对dsl文件进行词法、语法分析,识别dsl声明的行为节点是否存在语法异常;若是,则中断代码生成过程,并生成提示消息,用以提示人工介入修改;若否,则利用模板技术对dsl声明的未引用实现的行为节点进行实现代码生成;将生成的代码文件落盘至指定代码路径,并根据获取的dsl定义语句位置更新补全定义语句。
[0121]
图11为本技术实施例提供的一种数据抓取引擎执行装置400的结构框图。如图11所示,该数据抓取引擎执行装置400主要包括:权重计算模块401,用于响应于外部事件,计算行为树的当前行为节点的权重;优先级生成模块402,用于基于当前行为节点的权重以及当前行为节点的后续行为节点的权重,生成当前行为节点的优先级数值;队列更新模块403,用于基于当前行为节点的优先级数值更新任务队列;调度模块404,用于基于更新后的任务队列,对行为树的节点执行进行调度。
[0122]
作为本实施例的一种可选实施方式,权重计算模块401中当前行为节点的权重的
计算公式为:公式(1);公式(1)中,为当前行为节点的权重;为当前行为节点第次执行的节点运行时间,其中,,≥1且为整数;为当前行为节点已执行的次数,其中,≥1且为整数。
[0123]
作为本实施例的一种可选实施方式,该装置还包括:检查模块,用于在响应于外部事件,计算行为树的当前行为节点的权重之前,检查黑板系统中是否存在初始化的行为树;若是,则进入初始化模块,若否,则进入还原模块;初始化模块,用于对行为树的上下文信息进行初始化;还原模块,用于利用dsl文件还原行为树。
[0124]
作为本实施例的一种可选实施方式,还原模块,具体用于扫描dsl文件;根据dsl词法表构造有穷状态机,通过有穷状态机解析dsl文件,得到词法token流;根据dsl语法表构造语法分析器,对词法token流顺序遍历,载入语法分析器中进行语法检查,清理无语义token;采用逆波兰后缀表达式方式,通过双堆栈逐行构造抽象语法树;对抽象语法树进行执行,在执行过程中翻译成内存中行为树的节点。
[0125]
本技术实施例中的各功能模块可以集成在一起形成一个独立的单元,例如集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成形成一个独立的单元。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器或者网络设备等) 或处理器(processor)执行本技术各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
[0126]
本技术实施例提供的方法中的各种变化方式和具体实例同样适用于本实施例提供的装置,通过前述对数据抓取引擎开发和执行方法的详细描述,本领域技术人员可以清楚的知道本实施例中的数据抓取引擎开发和执行装置的实施方法,为了说明书的简洁,在此不再详述。
[0127]
图12为本技术实施例提供的一种电子设备500的结构框图。如图12所示,电子设备500包括存储器501、处理器502、通信总线503;存储器501、处理器502通过通信总线503相连。
[0128]
存储器501可用于存储指令、程序、代码、代码集或指令集。存储器501可以包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令以及用于实现上述实施例提供的数据抓取引擎开发和/或执行方法的指令等;存储数据区可存储上述实施例提供的数据抓取引擎开发和/或执行方法中涉及到的数据
等。
[0129]
处理器502可以包括一个或者多个处理核心。处理器502通过运行或执行存储在存储器501内的指令、程序、代码集或指令集,调用存储在存储器501内的数据,执行本技术的各种功能和处理数据。处理器502可以为特定用途集成电路(application specific integrated circuit,asic)、数字信号处理器(digital signal processor,dsp)、数字信号处理装置(digital signal processing device,dspd)、可编程逻辑装置(programmable logic device,pld)、现场可编程门阵列(field programmable gate array,fpga)、中央处理器(central processing unit,cpu)、控制器、微控制器和微处理器中的至少一种。可以理解地,对于不同的设备,用于实现上述处理器502功能的电子器件还可以为其它,本技术实施例不作具体限定。
[0130]
通信总线503可包括一通路,在上述组件之间传送信息。通信总线503可以是pci(peripheral component interconnect,外设部件互连标准)总线或eisa (extended industry standard architecture,扩展工业标准结构)总线等。通信总线503可以分为地址总线、数据总线、控制总线等。为便于表示,图12中仅用一个双箭头表示,但并不表示仅有一根总线或一种类型的总线。且图12示出的电子设备仅仅是一个示例,不应对本技术实施例的功能和使用范围带来任何限制。
[0131]
本技术实施例提供一种计算机可读存储介质,存储有能够被处理器加载并执行如上述实施例提供的数据抓取引擎开发和/或执行方法的计算机程序。
[0132]
本实施例中,计算机可读存储介质可以是保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质可以是但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意组合。具体的,计算机可读存储介质可以是便携式计算机盘、硬盘、u盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、讲台随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、光盘、磁碟、机械编码设备以及上述任意组合。
[0133]
本实施例中的计算机程序包含用于执行图1、图2、图4、图8所示的方法的程序代码,程序代码可包括对应执行上述实施例提供的方法步骤对应的指令。计算机程序可从计算机可读存储介质下载到各个计算/处理设备,或者通过网络(例如因特网、局域网、广域网和/或无线网)下载到外部计算机或外部存储设备。计算机程序可完全地在用户计算机上执行、作为一个独立的软件包执行。
[0134]
在本技术所提供的实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0135]
另外,需要理解的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
[0136]
以上仅为本技术的优选实施例而已,并不用于限制本技术,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献