小程序的数据获取方法、装置、计算机设备和存储介质与流程

文档序号:21461753发布日期:2020-07-14 16:39阅读:223来源:国知局
小程序的数据获取方法、装置、计算机设备和存储介质与流程

本申请涉及计算机技术领域,特别是涉及一种小程序的数据获取方法、装置、计算机设备和存储介质。



背景技术:

随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。传统的采集数据方法,通常是采用网络爬虫对数据进行采集。网络爬虫指的是通过模拟浏览器行为进行发送网络请求,并在接收请求响应后,按照一定的规则,自动地对数据进行分析并保存的技术。而随着网络技术的进一步发展,出现了小程序技术。小程序指的是基于宿主程序实现的一种不需要下载安装即可使用的应用。

然而,采用网络爬虫对小程序的数据进行采集时,存在无法爬取到小程序的数据的问题。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够获取到小程序的数据的小程序的数据获取方法、装置、计算机设备和存储介质。

一种小程序的数据获取方法,所述方法包括:

获取第一小程序,并运行所述第一小程序;

在所述第一小程序的运行过程中,劫持所述第一小程序的加载接口;

获取爬虫程序,将所述爬虫程序的代码注入所述第一小程序的代码中,生成第二小程序;所述第二小程序的加载接口与所述第一小程序的加载接口相同;

调用所述第二小程序的加载接口加载所述第二小程序的代码,生成所述第二小程序的页面;

通过所述爬虫程序采集所述第二小程序的页面中的数据。

一种小程序的数据获取装置,所述装置包括:

运行模块,用于获取第一小程序,并运行所述第一小程序;

劫持模块,用于在所述第一小程序的运行过程中,劫持所述第一小程序的加载接口;

第二小程序生成模块,用于获取爬虫程序,将所述爬虫程序的代码注入所述第一小程序的代码中,生成第二小程序;所述第二小程序的加载接口与所述第一小程序的加载接口相同;

页面生成模块,用于调用所述第二小程序的加载接口加载所述第二小程序的代码,生成所述第二小程序的页面;

数据采集模块,用于通过所述爬虫程序采集所述第二小程序的页面中的数据。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。

一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法的步骤。

上述小程序的数据获取方法、装置、计算机设备和存储介质,获取第一小程序,并运行第一小程序;在第一小程序的运行过程中,劫持第一小程序的加载接口;获取爬虫程序,将爬虫程序的代码注入第一小程序的代码中,生成第二小程序;第二小程序的加载接口与第一小程序的加载接口相同;调用第二小程序的加载接口加载第二小程序的代码,生成第二小程序的页面;第一小程序是基于宿主程序运行的,则将爬虫程序的代码注入第一小程序的代码中,爬虫程序与第一小程序可以基于宿主程序相同的底层架构、相同的运行逻辑等进行运行,从而可以通过第二小程序所包含的爬虫程序,采集第二小程序的页面中的数据,实现了对第二小程序的数据进行采集的功能。

附图说明

图1为一个实施例中小程序的数据获取方法的应用环境图;

图2为一个实施例中小程序的数据获取方法的流程示意图;

图3为一个实施例中对采集的文本数据生成的安全报告的示意图;

图4为一个实施例中对采集的图片数据生成的安全报告的示意图;

图5为一个实施例中小程序的应用示意图;

图6为一个实施例中采集第二小程序的页面中的数据的示意图;

图7为另一个实施例中采集第二小程序的页面中的数据的示意图;

图8为另一个实施例中小程序的数据获取方法的流程示意图;

图9为一个实施例中小程序的数据获取装置的结构框图;

图10为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的小程序的数据获取方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。终端102获取第一小程序,并通过网络向服务器104发送数据请求;接收到服务器104根据数据请求返回的数据时,可以运行第一小程序;在第一小程序的运行过程中,劫持第一小程序的加载接口;获取爬虫程序,将爬虫程序的代码注入第一小程序的代码中,生成第二小程序;第二小程序的加载接口与第一小程序的加载接口相同;调用第二小程序的加载接口加载第二小程序的代码,生成第二小程序的页面;通过爬虫程序采集第二小程序的页面中的数据。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一个实施例中,如图2所示,提供了一种小程序的数据获取方法,包括以下步骤:

步骤202,获取第一小程序,并运行第一小程序。

小程序指的是基于宿主程序实现的一种不需要下载安装即可使用的应用程序。宿主程序可以是微信、支付宝、或者其他的应用程序等。

终端打开第一小程序的宿主程序,从宿主程序中获取第一小程序,并运行第一小程序。在一种实施方式中,可以从宿主程序的小程序集合中获取到第一小程序。其中,小程序集合可以是用户历史上所使用过的小程序的集合,也可以是用户所收藏的小程序的集合,不限于此。

在另一种实施方式中,可以通过宿主程序调用终端的摄像头,从而打开摄像头对第一小程序对应的扫描码进行扫描,从而获取第一小程序。其中,扫描码可以是条形码、二维码等。

终端获取到第一小程序之后,接收第一小程序生成的运行指令,基于该运行指令运行获取到第一小程序的代码,对第一小程序的代码进行解析,从而运行第一小程序。

步骤204,在第一小程序的运行过程中,劫持第一小程序的加载接口。

第一小程序的运行环境包括渲染层和逻辑层。第一小程序的渲染层用于将第一小程序的数据表现出来,例如在终端的显示界面上显示第一小程序的默认页面。第一小程序的逻辑层用于生成第一小程序的数据以及对第一小程序的数据进行处理,例如传递数据、对数据进行校验、调用接口等。第一小程序的加载接口指的是用于对第一小程序的代码进行加载,从而可以将第一小程序展示在终端的显示界面上的接口。

具体地,在第一小程序的运行过程中,采用hook技术劫持第一小程序的加载接口。其中,hook(钩子)技术是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理。hook技术可以用来监视系统中特定事件的发生,完成特定功能,如屏幕取词,监视日志,截获键盘以及鼠标的输入等等。

步骤206,获取爬虫程序,将爬虫程序的代码注入第一小程序的代码中,生成第二小程序;第二小程序的加载接口与第一小程序的加载接口相同。

爬虫程序指的是按照一定的规则、自动抓取第一小程序的数据的程序。爬虫程序可以通过开发人员设计得到。第二小程序指的是所要采集数据的小程序。第二小程序包含了第一小程序的代码以及爬虫程序的代码。

可以理解的是,第二小程序包括了爬虫程序的代码和第一小程序的代码,而爬虫程序是用于采集第二小程序页面中的数据的程序,并不改变第一小程序的加载接口等底层架构,因此第二小程序与第一小程序的基本功能、基本架构等均相同,第二小程序的加载接口也与第一小程序的加载接口相同。

步骤208,调用第二小程序的加载接口加载第二小程序的代码,生成第二小程序的页面。

第二小程序的页面中,可以包括图片、文本、链接、视频等数据,也可以包括按钮(wx-button)、输入框(wx-input)、导航栏(wx-navigator)等元素。

终端调用第二小程序的加载接口加载第二小程序的代码,也就是加载第一小程序的代码以及爬虫程序的代码,生成第二小程序的页面。在第二小程序的页面中,可以包括第一小程序的默认页面,例如,第一小程序的初始页面;也可以包括动态页面。动态页面指的是通过点击链接、按钮等元素而跳转的页面。

步骤210,通过爬虫程序采集第二小程序的页面中的数据。

爬虫程序采集第二小程序的页面中的数据,可以包括图片、文本、链接、视频等数据,也可以包括按钮、输入框等元素。爬虫程序还可以抓取第二小程序发送至服务器的网络请求。

爬虫程序指的是按照一定的规则、自动抓取第二小程序的数据的程序。当页面为第一小程序的默认页面时,通过爬虫程序采集该默认页面中的数据。当页面中包括链接、按钮、输入框、导航栏等元素时,爬虫程序可以根据该元素模拟用户行为,对链接、按钮、导航栏等元素进行点击或者获取输入数据等操作,从而跳转至下一个页面,再通过爬虫程序采集下一个页面中的数据。

上述小程序的数据获取方法,获取第一小程序,并运行第一小程序;在第一小程序的运行过程中,劫持第一小程序的加载接口;获取爬虫程序,将爬虫程序的代码注入第一小程序的代码中,生成第二小程序;第二小程序的加载接口与第一小程序的加载接口相同;调用第二小程序的加载接口加载第二小程序的代码,生成第二小程序的页面;第一小程序是基于宿主程序运行的,则将爬虫程序的代码注入第一小程序的代码中,爬虫程序与第一小程序可以基于宿主程序相同的底层架构、相同的运行逻辑等进行运行,从而可以通过第二小程序所包含的爬虫程序,采集第二小程序的页面中的数据,实现了对第二小程序的数据进行采集的功能。

将爬虫程序的代码注入第一小程序的代码中,则爬虫程序具备了访问第一小程序的dom(documentobjectmodel,文档对象模型)数据的能力,也具备了访问第一小程序的宿主程序的本地接口的能力。因此,爬虫程序可以与第一小程序的宿主程序进行交互,例如调用宿主程序的支付功能,从而可以采集到第二小程序与宿主程序之间进行交互的数据,采集到第二小程序更加完整的数据。

将爬虫程序的代码注入第一小程序的代码中,可以直接获取到第一小程序中dom(documentobjectmodel,文档对象模型)所定义的元素类型,基于第一小程序中dom所定义的元素类型可以准确地获取到第二小程序的数据,避免了采用网络爬虫在浏览器对小程序的数据进行采集的过程中,浏览器采用不同的元素类型而无法正常渲染小程序中的页面元素,从而无法通过网络爬虫采集小程序的数据的问题。

可以理解的是,小程序的事件机制依赖小程序的低层架构,传统技术中采用网络爬虫在浏览器对小程序采集数据时,浏览器无法正确触发、处理这些事件。而在本实施例中,将爬虫程序的代码注入第一小程序的代码中,生成第二小程序,则第二小程序也是基于开发人员所定义的小程序的底层架构运行的,通过爬虫程序可以采集到第二小程序的数据,实现对第二小程序的数据进行采集的功能。

进一步地,在通过爬虫程序采集第二小程序的页面中的数据之后,包括:对采集的第二小程序的页面中的数据进行扫描,得到各个数据的安全属性;基于各个数据的安全属性,生成第二小程序的安全报告。

数据的安全属性例如安全、不安全,进一步地数据的安全属性可以为暴力、色情、人物、风景等。对采集的第二小程序的页面中的数据进行扫描,得到各个数据的安全属性,从而可以更准确地评估第二小程序的安全性。

当数据为文本时,获取参考关键词,将参考关键词与文本进行匹配,根据匹配结果确定该文本的安全属性。例如,参考关键词可以为a(a表示暴力),当从第二小程序的页面中采集的文本与a相匹配时,表示该文本中包括a,则可以将该文本的安全属性为“不安全-暴力”。

在一个实施例中,如图3所示,第二小程序为外卖小程序,从第二小程序中获取文本,生成第二小程序中文本的安全报告。编号为1的文本内容为“a”,检测到“a”是表示暴力的词语,因此生成“a”的安全属性为“不安全-暴力”,还可以获取到文本内容为“a”所在的订单为“b1”,该文本内容“a”的采集时间为2019-05-3109:47:21。

编号为2的文本内容为“11月”,检测到“11月”是表示时间的词语,因此生成“11月”的安全属性为“安全-时间”,还可以获取到文本内容为“11月”所在的订单为“b2”,该文本内容“11月”的采集时间为2019-05-3109:48:26。

编号为3的文本内容为“高新区”,检测到“高新区”是表示地址的词语,因此生成“高新区”的安全属性为“安全-地址”,还可以获取到文本内容为“高新区”所在的订单为“b2”,该文本内容“高新区”的采集时间为2019-05-3109:48:38。

编号为4的文本内容为“服务态度差”,检测到“服务态度差”是表示评价的词语,因此生成“服务态度差”的安全属性为“安全-评价”,还可以获取到文本内容为“服务态度差”所在的订单为“b3”,该文本内容“服务态度差”的采集时间为2019-05-3109:50:21。

当数据为图片或者视频时,检测图片或者视频中是否包含敏感信息;当图片或者视频中包含敏感信息时,该图片或者视频的安全属性可以为“不安全”;当图片或者视频中不包含敏感信息时,该图片或者视频的安全属性可以为“安全”。其中,敏感信息可以是暴力、色情、辱骂等信息。

在一个实施例中,从第二小程序的页面中采集图片,并生成采集的图片的安全报告。如图4所示,采集的图片编号为1,该图片的图片地址为“a1”,检测到该图片的安全属性为“安全-人物”,还可以获取到该图片的采集时间为2019-05-3109:47:21。

采集的图片编号为2,该图片的图片地址为“a2”,检测到该图片的安全属性为“安全-风景”,还可以获取到该图片的采集时间为2019-05-3109:48:26。

采集的图片编号为3,该图片的图片地址为“a3”,检测到该图片的安全属性为“安全-人物”,还可以获取到该图片的采集时间为2019-05-3109:48:38。

采集的图片编号为4,该图片的图片地址为“a4”,检测到该图片的安全属性为“安全-人物”,还可以获取到该图片的采集时间为2019-05-3109:50:21。

当数据为链接时,可以从服务器获取参考链接集合,将该链接与参考链接集合中的各个参考链接进行匹配,根据匹配结果确定该链接的安全属性。参考链接集合中还包括各个参考链接所对应的参考安全属性。当从第二小程序中所采集的链接与参考链接集合中的参考链接相匹配时,将相匹配的参考链接所对应的参考安全属性作为该从第二小程序中所采集的链接的安全属性。例如,从第二小程序中所采集的链接为b1,当该链接b1与参考链接b2相匹配,参考链接b2所对应的安全属性为色情,则链接b1所对应的安全属性为“色情”。

如图5所示,当第一小程序的宿主程序为微信时,502指的是微信客户端,包括了微信本身的应用程序和第一小程序。小程序的运行环境分成渲染层和逻辑层,其中wxml(weixinmarkuplanguage)模板、wxss(weixinstylesheets)样式(dom数据)、渲染逻辑等工作在渲染层,js(javascript)脚本工作在逻辑层。wxml是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。wxss是一套样式语言,用于描述wxml的组件样式。dom(documentobjectmodel,文档对象模型)指的是w3c(worldwidewebconsortium,万维网联盟)组织推荐的处理可扩展置标语言的标准编程接口。渲染逻辑包括dom操作接口等数据,由js脚本实现。

第一小程序的渲染层的界面使用了504,即webview进行渲染;逻辑层采用506,即jscore线程运行js脚本。第一小程序存在多个界面,所以渲染层存在多个webview。渲染层和逻辑层之间的通信会经由508,即native(微信本身的应用程序)做中转,逻辑层发送网络请求也经由508,即native转发至第三方服务器510。而第三方服务器510发送的数据也经由508,即native转发至逻辑层中。第三方服务器510与终端中的微信客户端502采用websocket进行通信。websocket是一种在单个tcp(transmissioncontrolprotocol,传输控制协议)连接上进行全双工通信的协议。

在一个实施例中,第一小程序的代码包括第一渲染层代码和第一逻辑层代码,爬虫程序的代码包括第二渲染层代码和第二逻辑层代码。将爬虫程序的代码注入第一小程序的代码中,生成第二小程序,包括:将爬虫程序的第二渲染层代码注入第一小程序的第一渲染层代码中,得到第二小程序的渲染层代码;将爬虫程序的第二逻辑层代码注入第一小程序的第一逻辑层代码中,得到第二小程序的逻辑层代码;基于第二小程序的渲染层代码和第二小程序的逻辑层代码生成第二小程序。

渲染层用于将数据表现出来,例如将各个元素显示在界面中。逻辑层用于生成数据以及对数据进行处理,例如传递数据、对数据进行校验、调用接口等。第一渲染层代码指的是第一小程序的渲染层的代码。第一逻辑层代码指的是第一小程序的逻辑层的代码。第二渲染层代码指的是爬虫程序的渲染层的代码。第二逻辑层代码指的是爬虫程序的逻辑层的代码。

具体地,将爬虫程序的第二渲染层代码注入至第一小程序的第一渲染层代码的尾部,得到第二小程序的渲染层代码;调用v8引擎(javascript引擎)接口将第二逻辑层代码注入第一小程序的第一逻辑层代码中,得到第二小程序的逻辑层代码。

在本实施例中,第二小程序的渲染层代码包含了爬虫程序的第二渲染层代码,第二小程序的逻辑层代码包含了爬虫程序的第二逻辑层代码,则爬虫程序既可以在渲染层上与第一小程序进行交互,如采集数据、增加数据、修改数据等,也可以在逻辑层上对数据进行校验,可以采集到更加完整以及准确的数据。

在一个实施例中,调用第二小程序的加载接口加载第二小程序的代码,生成第二小程序的页面,包括:调用第二小程序的加载接口,加载第二小程序的渲染层代码,并采用第二小程序的逻辑层代码对第二小程序的渲染层代码的逻辑进行校验;当对第二小程序的渲染层代码的逻辑校验通过时,生成第二小程序的渲染层代码所对应的页面。

终端调用第二小程序的加载接口,加载第二小程序的渲染层代码,可以生成第二小程序的渲染层代码所对应的页面。第二小程序的渲染层代码的逻辑可以包括第二小程序的的渲染层代码中所调用的api(applicationprogramminginterface,应用程序接口)是否正确,第二小程序的渲染层代码中元素的内容与元素的类型是否对应等。例如,元素的类型为手机号码,元素的内容为图片,则该素的内容与元素的类型不对应。

当对第二小程序的渲染层代码的逻辑校验通过时,可以生成更加准确的第二小程序的渲染层所对应的页面,从而采集到更加准确的数据,避免了第二小程序的渲染层代码的逻辑不准确使得生成的页面错乱、存在乱码等问题。

在一个实施例中,如图6所示,通过爬虫程序采集第二小程序的页面中的数据,包括:

步骤602,通过爬虫程序获取第二小程序的当前页面,并获取当前页面中各个元素的数据;元素的数据包括元素的类型。

在当前页面中,可以包括各种元素,如图片、文本、链接、视频、导航栏等。通过爬虫程序遍历当前页面中的各个元素,并获取各个元素的数据。元素的数据可以包括元素的类型,还可以包括元素的数据量大小、元素的位置、元素的大小等。其中,元素的类型例如输入类型、图片类型、文本类型、链接类型等。

步骤604,当元素的类型为输入类型时,根据输入类型的元素跳转至下一个页面。

具体地,获取当前页面中各个元素的数据,元素的数据包括元素的类型;从各个元素的数据中筛选出元素的类型为输入类型的元素。

当元素的类型为输入类型时,则需要对该元素输入数据,从而可以通过该输入类型的元素跳转至下一个页面。例如,该元素的类型为地址,则需要对该元素输入地址信息,从而跳转至下一个页面。又如,该元素的类型为登录按钮,则需要对该元素输入登录指令,可以点击或者滑动方块至预设位置等,从而登录至下一个页面。又如,该元素的类型为链接,则需要对该元素输入点击指令,可以点击或者执行预设的操作,从而跳转至下一个页面。

步骤606,将下一个页面作为新的当前页面,执行获取当前页面中各个元素的数据步骤,直到遍历第二小程序中的各个页面,并获取每个页面中各个元素的数据为止。

当跳转至下一个页面之后,将下一个页面作为新的当前页面,再获取当前页面中各个元素的数据,以此类推,直到遍历第二小程序中的各个页面,并获取每个页面中各个元素的数据为止。

在本实施例中,通过爬虫程序获取第二小程序的当前页面,并获取当前页面中各个元素的数据;元素的数据包括元素的类型;当元素的类型为输入类型时,根据输入类型的元素跳转至下一个页面;将下一个页面作为新的当前页面,执行获取当前页面中各个元素的数据步骤,直到遍历第二小程序中的各个页面,并获取每个页面中各个元素的数据为止,可以获取到第二小程序中的每一个页面,以及每一个页面中的每一个元素的数据,获取到第二小程序更完整的数据。

在一个实施例中,当元素的类型为输入类型时,根据输入类型的元素跳转至下一个页面,包括:当元素的类型为输入类型时,通过爬虫程序获取输入类型对应的输入数据;将输入数据输入元素中,生成跳转指令;根据跳转指令跳转至下一个页面。

终端可以预先获取输入类型与输入数据的对应关系。在一种实施方式中,终端可以从本地的存储器中获取输入类型与输入数据的对应关系。在另一种实施方式中,终端也可以从爬虫程序中获取输入类型与输入数据的对应关系。在另一种实施方式中,终端还可以从后台服务器中获取输入类型与输入数据的对应关系。后台服务器可以是第一小程序的宿主程序所对应的服务器。例如,第一小程序的宿主程序为微信,则终端可以从微信服务器中获取输入类型与输入数据的对应关系。

跳转指令中包括下一个页面的地址,根据该下一个页面的地址,查找并加载下一个页面,将下一个页面展示在终端的显示界面上。

输入类型的元素可以为按钮、输入框、链接、导航栏等。当输入类型的元素为按钮时,对应的输入数据为点击指令或者滑动指令等;将点击指令或者滑动指令等输入数据输入到按钮中,即点击按钮,生成跳转指令,跳转至下一个页面。

当输入类型的元素为输入框时,对应的输入数据为文本、图片、视频、链接等;将文本、图片、视频、链接等输入数据输入到输入框中,生成跳转指令,跳转至下一个页面。

当输入类型的元素为输入框时,为了更准确地将在输入框中输入对应的输入数据,可以进一步区分输入框的输入类型。例如,可以将输入框的输入类型区分为:电话号码输入框、验证码输入框、密码输入框、图片输入框、账号输入框、文本输入框、地址输入框等。

当输入类型的元素为链接时,对应的输入数据为点击指令或者其他的预设指令等;将点击指令或者其他的预设指令等输入数据输入到链接中,即点击链接,生成跳转指令,跳转至下一个页面。

在本实施例中,通过爬虫程序模拟用户行为,如点击链接、在输入框中输入对应的数据、点击按钮、点击导航栏等,可以跳转至下一个页面,从而采集下一个页面中的数据,可以更完整地采集到第二小程序的数据。

在一个实施例中,如图7所示,爬虫程序的代码包括第二渲染层代码和第二逻辑层代码。

通过爬虫程序获取输入类型对应的输入数据,包括:

步骤702,通过爬虫程序的第二渲染层代码获取输入类型对应的输入数据。

终端预先获取输入类型与输入数据的对应关系,当通过爬虫程序获取到元素的类型为输入类型时,从输入类型与输入数据的对应关系中获取与该元素的输入类型相匹配的输入数据。

将输入数据输入元素中,生成跳转指令,包括:

步骤704,将输入数据输入元素中,通过爬虫程序的第二逻辑层代码对输入数据进行校验。

可以理解的是,输入框中输入对应的数据,才能准确跳转至下一个页面。例如,登录按钮要输入点击指令,才能准确跳转至下一个页面;验证码输入框中要输入对应的验证码,才能跳转至下一个页面。又如,当登录按钮输入的是图片或者文本,则输入数据与该元素并不对应,无法跳转至下一个页面;当手机号码输入框中输入点击指令,则输入数据与该元素并不对应,无法跳转至下一个页面。

因此,通过爬虫程序的第二逻辑层代码对输入数据进行校验,可以使得输入数据与输入类型的元素相对应,从而可以跳转至下一个页面。

步骤706,当对输入数据校验通过时,生成跳转指令。

在本实施例中,通过爬虫程序的第二渲染层代码获取输入类型对应的输入数据;将输入数据输入元素中,通过爬虫程序的第二逻辑层代码对输入数据进行校验,可以使得输入数据与输入类型的元素相对应,生成跳转指令,从而可以跳转至下一个页面。

在一个实施例中,上述方法还包括:对第一小程序的代码进行解析,得到第一小程序的加载接口。在第一小程序的运行过程中,劫持第一小程序的加载接口,包括:在第一小程序的运行过程中,监控第一小程序所调用的接口;当第一小程序调用加载接口时,劫持第一小程序的加载接口。

在第一小程序的代码中,第一小程序的各个接口具有对应的标识,可以从第一小程序的代码中查找到加载接口的标识,从而得到第一小程序的加载接口。

在第一小程序的运行过程中,采用hook技术监控第一小程序所调用的接口;当检测到第一小程序调用加载接口时,劫持第一小程序的加载接口,即不让第一小程序调用加载接口。

进一步地,获取第一小程序的宿主程序的安装包;对该宿主程序的安装包进行反编译,得到宿主程序的代码;从宿主程序的代码中获取第一小程序的代码。

可以理解的是,小程序是基于宿主程序运行的,小程序并不用单独的安装包进行安装,小程序的代码存在于宿主程序的安装包中。因此,首先获取第一小程序的宿主程序的安装包,再对该宿主程序的安装包进行反编译,得到宿主程序的代码。而宿主程序的代码中包括了第一小程序的代码,从宿主程序的代码中查找到第一小程序的代码的地址,并获取到第一小程序的代码。

终端中所运行的系统可以是安卓系统、ios(iphoneoperationsystem)系统、linux系统等其中的一种。当终端中所运行的系统是安卓系统时,可以采用dex的代码反编译工具中的apk(androidapplicationpackage,安卓应用程序包)反编译技术对宿主程序的安装包进行反编译,得到宿主程序的伪代码,对宿主程序的伪代码进行分析,得到第一小程序的伪代码,再将第一小程序的伪代码转换成第一小程序的代码。其中,伪代码(pseudocode)指的是用介于自然语言和计算机语言之间的文字和符号(包括数学符号)来描述算法的语言。宿主程序的安装包中包括了宿主程序运行时的相关逻辑,也包括了第一小程序运行时的相关逻辑。

在一个实施例中,如图8所示,获取到第一小程序和爬虫程序之后,执行步骤802,将爬虫程序的代码注入第一小程序的代码中,生成第二小程序。执行步骤804,通过爬虫程序获取第二小程序的页面。执行步骤806,遍历各个页面。

执行步骤808,判断是否已遍历所有页面。当判断为否时,即未遍历所有页面时,执行步骤810,跳转至下一个页面。执行步骤812,遍历页面中所有元素。执行步骤814,判断是否已采集页面中所有元素的数据。当判断为是时,即已采集页面中所有元素的数据时,返回执行步骤806,遍历各个页面。当判断为否时,即未采集页面中所有元素的数据时,执行步骤816,通过爬虫程序对输入类型的元素进行模拟操作。具体地,通过爬虫程序获取输入类型对应的输入数据;将输入数据输入元素中,生成跳转指令。执行步骤810,跳转至下一个页面。

在执行步骤808,判断是否已遍历所有页面之后,当判断为是时,即已遍历所有页面时,表示爬虫程序已采集到第二小程序的所有页面中的所有元素,则结束。

应该理解的是,虽然图2、图6至图8的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、图6至图8中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图9所示,提供了一种小程序的数据获取装置900,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:运行模块902、劫持模块904、第二小程序生成模块906、页面生成模块908和数据采集模块910,其中:

运行模块902,用于获取第一小程序,并运行第一小程序。

劫持模块904,用于在第一小程序的运行过程中,劫持第一小程序的加载接口。

第二小程序生成模块906,用于获取爬虫程序,将爬虫程序的代码注入第一小程序的代码中,生成第二小程序;第二小程序的加载接口与第一小程序的加载接口相同。

页面生成模块908,用于调用第二小程序的加载接口加载第二小程序的代码,生成第二小程序的页面。

数据采集模块910,用于通过爬虫程序采集第二小程序的页面中的数据。

上述小程序的数据获取装置,获取第一小程序,并运行第一小程序;在第一小程序的运行过程中,劫持第一小程序的加载接口;获取爬虫程序,将爬虫程序的代码注入第一小程序的代码中,生成第二小程序;第二小程序的加载接口与第一小程序的加载接口相同;调用第二小程序的加载接口加载第二小程序的代码,生成第二小程序的页面;第一小程序是基于宿主程序运行的,则将爬虫程序的代码注入第一小程序的代码中,爬虫程序与第一小程序可以基于宿主程序相同的底层架构、相同的运行逻辑等进行运行,从而可以通过第二小程序所包含的爬虫程序,采集第二小程序的页面中的数据,实现了对第二小程序的数据进行采集的功能。

在一个实施例中,第一小程序的代码包括第一渲染层代码和第一逻辑层代码,爬虫程序的代码包括第二渲染层代码和第二逻辑层代码。上述第二小程序生成模块906还用于将爬虫程序的第二渲染层代码注入第一小程序的第一渲染层代码中,得到第二小程序的渲染层代码;将爬虫程序的第二逻辑层代码注入第一小程序的第一逻辑层代码中,得到第二小程序的逻辑层代码;基于第二小程序的渲染层代码和第二小程序的逻辑层代码生成第二小程序。

在一个实施例中,上述页面生成模块908还用于调用第二小程序的加载接口,加载第二小程序的渲染层代码,并采用第二小程序的逻辑层代码对第二小程序的渲染层代码的逻辑进行校验;当对第二小程序的渲染层代码的逻辑校验通过时,生成第二小程序的渲染层代码所对应的页面。

在一个实施例中,上述数据采集模块910还用于通过爬虫程序获取第二小程序的当前页面,并获取当前页面中各个元素的数据;元素的数据包括元素的类型;当元素的类型为输入类型时,根据输入类型的元素跳转至下一个页面;将下一个页面作为新的当前页面,执行获取当前页面中各个元素的数据步骤,直到遍历第二小程序中的各个页面,并获取每个页面中各个元素的数据为止。

在一个实施例中,上述数据采集模块910还用于当元素的类型为输入类型时,通过爬虫程序获取输入类型对应的输入数据;将输入数据输入元素中,生成跳转指令;根据跳转指令跳转至下一个页面。

在一个实施例中,爬虫程序的代码包括第二渲染层代码和第二逻辑层代码。上述数据采集模块910还用于通过爬虫程序的第二渲染层代码获取输入类型对应的输入数据;将输入数据输入元素中,通过爬虫程序的第二逻辑层代码对输入数据进行校验;当对输入数据校验通过时,生成跳转指令。

在一个实施例中,上述小程序的数据获取装置900还包括解析模块,用于对第一小程序的代码进行解析,得到第一小程序的加载接口。上述劫持模块904还用于在第一小程序的运行过程中,监控第一小程序所调用的接口;当第一小程序调用加载接口时,劫持第一小程序的加载接口。

关于小程序的数据获取装置的具体限定可以参见上文中对于小程序的数据获取方法的限定,在此不再赘述。上述小程序的数据获取装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过wifi、运营商网络、nfc(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种小程序的数据获取方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-onlymemory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(randomaccessmemory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(staticrandomaccessmemory,sram)或动态随机存取存储器(dynamicrandomaccessmemory,dram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1