一种历史数据的追溯爬取方法及终端转让专利

申请号 : CN201910191973.0

文献号 : CN109992705B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘德建林琛陈晗

申请人 : 福建省天奕网络科技有限公司

摘要 :

本发明提供了历史数据的追溯爬取及终端,其方法包括以下步骤:S1:设定历史数据追溯方向,以及每一次爬取历史数据量对应的第一阈值;S2:根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;将多个第一URL进行排序,得到第一序列;S3:每隔预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据。本发明提供了一种历史数据的追溯爬取方法及终端,在追溯爬取历史数据的过程中无需人工参与,能够提高历史数据爬取的效率。

权利要求 :

1.一种历史数据的追溯爬取方法,其特征在于,包括以下步骤:S1:设定历史数据追溯方向,以及每一次爬取历史数据量对应的第一阈值;

S2:根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;将多个第一URL进行排序,得到第一序列;

S3:每隔预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据;其中,所述S3具体为:S31:获取第一序列中排序在最前的第一URL,得到待爬取数据对应的第二URL;预设变量r,所述变量r的初始值为1;

S32:爬取第二URL对应网页上的数据;

S33:若第二URL对应网页上的数据均获取完毕,则将预设的第r个标识值置为预设第一值,并将第r个标识值以及第二URL存储在缓存中,每一个标识值的初始值均为预设第二值;

S34:令r=r+1;

S35:在预设第三时间获取缓存中最大的r值,得到第三值;所述预设第三时间=预设第四时间+预设时间;所述预设第四时间为开始爬取第二URL对应网页上的数据对应的时间点;

S36:将第三值加一,得到第四值;

S37:根据所述第四值,获取第一序列中排序为第四值对应的第一URL,得到第三URL,将第二URL更新为所述第三URL;

S38:重复执行步骤S32-S37,直至接收到爬取数据结束指令或所有的历史数据均爬取完毕为止。

2.根据权利要求1所述的一种历史数据的追溯爬取方法,其特征在于,所述将多个第一URL进行排序,得到第一序列具体为:根据所述历史数据追溯方向以及每一个第一URL对应的历史数据的时间,对所有的第一URL进行排序,得到第一序列。

3.根据权利要求1所述的一种历史数据的追溯爬取方法,其特征在于,所述S1具体为:获取执行追溯历史数据对应的任务起始时间,得到第一时间;

获取所需追溯的历史数据的时间起点值,得到第二时间;

获取追溯历史数据的时间方向,得到历史数据追溯方向;

获取每一次连续追溯历史数据的天数,即为所述第一阈值。

4.根据权利要求3所述的一种历史数据的追溯爬取方法,其特征在于,所述根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL具体为:根据第二时间、历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;

所述第一URL包括多个第一子URL,第一子URL的数量与所述第一阈值相等。

5.根据权利要求4所述的一种历史数据的追溯爬取方法,其特征在于,所述S32具体为:根据第二URL,得到多个第二子URL;

根据所述历史数据追溯方向以及每一个第二子URL对应的历史数据的时间,依次爬取每一个第二子URL对应网页上的数据;

所述S33具体为:

当一第二子URL对应网页上的数据获取完毕时,将该第二子URL存储于缓存中;

判断所有的第二子URL对应网页上的数据是否均爬取完毕,若是,则将预设的第r个标识值置为预设第一值,并将第r个标识值存储在缓存中,所述r的初始值为1,每一个标识值的初始值为预设第二值。

6.根据权利要求5所述的一种历史数据的追溯爬取方法,其特征在于,在每一次爬取历史数据前,判断上一次爬取历史数据是否存在中断情况;

若是,则获取上一次爬取历史数据对应的第一URL,得到第四URL;

根据第四URL,得到多个的第四子URL;

根据所有的第四子URL,获取缓存中未存储的第四子URL,得到一个以上的第五子URL;

根据一个以上的第五子URL,得到第五URL,将第二URL更新为所述第五URL;

执行步骤S38。

7.一种历史数据的追溯爬取终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:S1:设定历史数据追溯方向,以及每一次爬取历史数据量对应的第一阈值;

S2:根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;将多个第一URL进行排序,得到第一序列;

S3:每隔预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据;

其中,所述S3具体为:

S31:获取第一序列中排序在最前的第一URL,得到待爬取数据对应的第二URL;预设变量r,所述变量r的初始值为1;

S32:爬取第二URL对应网页上的数据;

S33:若第二URL对应网页上的数据均获取完毕,则将预设的第r个标识值置为预设第一值,并将第r个标识值以及第二URL存储在缓存中,每一个标识值的初始值均为预设第二值;

S34:令r=r+1;

S35:在预设第三时间获取缓存中最大的r值,得到第三值;所述预设第三时间=预设第四时间+预设时间;所述预设第四时间为开始爬取第二URL对应网页上的数据对应的时间点;

S36:将第三值加一,得到第四值;

S37:根据所述第四值,获取第一序列中排序为第四值对应的第一URL,得到第三URL,将第二URL更新为所述第三URL;

S38:重复执行步骤S32-S37,直至接收到爬取数据结束指令或所有的历史数据均爬取完毕为止。

8.根据权利要求7所述的一种历史数据的追溯爬取终端,其特征在于,所述将多个第一URL进行排序,得到第一序列具体为:根据所述历史数据追溯方向以及每一个第一URL对应的历史数据的时间,对所有的第一URL进行排序,得到第一序列。

说明书 :

一种历史数据的追溯爬取方法及终端

技术领域

[0001] 本发明涉及数据处理技术领域,尤其涉及一种历史数据的追溯爬取方法及终端。

背景技术

[0002] 历史数据,是跟时间息息相关的一类数据,这类数据在内容上或许没有任何相关性,但它们产生的时间通常是线性的。
[0003] 在互联网系统开发过程中,难免会有与海量的历史数据打交道的需求;例如,在爬虫项目中,有时需要获取目标站点近几年的历史数据,如果请求一个历史页面链接后还要进行大量的二级链接请求,或中间处理流程较多,可能需要耗费大量的时间,这样,倘若要让系统从启动后一直运行到任务结束,或许需要持续几天、几周、甚至几个月的时间;在持续如此漫长的过程中,难免会遇到系统主机临时关闭、任务进程意外中断等非预期状况,给任务的持续性和完整性带来很大的困扰;于是,通常需要将这类任务分段执行,分段则要求通过人工介入的方式,根据上次进度的时间节点,对该段任务的目标页面的时间请求参数重新配置,从而实现任务衔接执行,整个过程就会显得过于繁琐、不灵活。若任务需要全年执行,则每天都要人工配置一次,极大地耗费人力成本。

发明内容

[0004] 本发明所要解决的技术问题是:本发明提供了一种历史数据的追溯爬取方法及终端,在追溯爬取历史数据的过程中无需人工参与,能够提高历史数据爬取的效率。
[0005] 为了解决上述技术问题,本发明提供了一种历史数据的追溯爬取方法,包括以下步骤:
[0006] S1:设定历史数据追溯方向,以及每一次爬取历史数据量对应的第一阈值;
[0007] S2:根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;将多个第一URL进行排序,得到第一序列;
[0008] S3:每隔预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据。
[0009] 本发明提供了一种历史数据的追溯爬取终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0010] S1:设定历史数据追溯方向,以及每一次爬取历史数据量对应的第一阈值;
[0011] S2:根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;将多个第一URL进行排序,得到第一序列;
[0012] S3:每隔预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据。
[0013] 本发明的有益效果为:
[0014] 本发明提供的一种历史数据的追溯爬取方法及终端,在历史数据的追溯爬取过程,只需要根据历史数据追溯方向及第一阈值,即可得到待多次爬取的历史数据分别对应的多个第一URL,并将其进行排序,得到第一序列,上述追溯爬取历史数据过程中,只需要配置一次,即可得到第一序列,而后按照预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据,可得到待爬取的所有历史数据,上述过程无需要人工参与,能够提高历史数据的追溯爬取的效率。

附图说明

[0015] 图1为根据本发明实施例的一种历史数据的追溯爬取方法的主要步骤示意图;
[0016] 图2为根据本发明实施例的一种历史数据的追溯爬取终端的结构示意图;
[0017] 标号说明:
[0018] 1、存储器;2、处理器。

具体实施方式

[0019] 为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。
[0020] 本发明最关键的构思为:获取历史数据追溯方向及第一阈值,从而获取得到待多次爬取的历史数据分别对应的第一URL,并将所有的第一URL进行排序,每隔预设时间依次爬取第一URL对应网页上的数据。
[0021] 请参照图1,本发明提供了一种历史数据的追溯爬取方法,包括以下步骤:
[0022] S1:设定历史数据追溯方向,以及每一次爬取历史数据量对应的第一阈值;
[0023] S2:根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;将多个第一URL进行排序,得到第一序列;
[0024] S3:每隔预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据。
[0025] 从上述描述可知,本发明提供的一种历史数据的追溯爬取方法,在历史数据的追溯爬取过程,只需要根据历史数据追溯方向及第一阈值,即可得到待多次爬取的历史数据分别对应的多个第一URL,并将其进行排序,得到第一序列,上述追溯爬取历史数据过程中,只需要配置一次,即可得到第一序列,而后按照预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据,可得到待爬取的所有历史数据,上述过程无需要人工参与,能够提高历史数据的追溯爬取的效率。
[0026] 进一步的,所述S3具体为:
[0027] S31:获取第一序列中排序在最前的第一URL,得到待爬取数据对应的第二 URL;预设变量r,所述r的初始值为1;
[0028] S32:爬取第二URL对应网页上的数据;
[0029] S33:若第二URL对应网页上的数据均获取完毕,则将预设的第r个标识值置为预设第一值,并将第r个标识值以及第二URL存储在缓存中,每一个标识值的初始值均为预设第二值;
[0030] S34:令r=r+1;
[0031] S35:在预设第三时间获取缓存中最大的r值,得到第三值;所述预设第三时间=预设第四时间+预设时间;所述预设第四时间为开始爬取第二URL对应网页上的数据对应的时间点;
[0032] S36:将第三值加一,得到第四值;
[0033] S37:根据所述第四值,获取第一序列中排序为第四值对应的第一URL,得到第三URL,将第二URL更新为所述第三URL;
[0034] S38:重复执行步骤S32-S37,直至接收到爬取数据结束指令或所有的历史数据均爬取完毕为止。
[0035] 从上述描述可知,通过上述方法,能够准确无误地获取每一次待爬取的历史数据,并且能够在每一次爬取历史数据时均是先从缓存中获取最大的r值,从而确定下一次需要爬取对应的URL,能够解决在任务意外中断时,还需要人工检查断点状况,针对性地进行调整,重新对追溯爬取历史数据进行配置的问题。
[0036] 优选的,所述缓存为redis缓存数据库,在任务执行过程中发生中断时,该缓存中的数据并不会丢失,能够提高数据爬取的稳定性。
[0037] 进一步的,所述将多个第一URL进行排序,得到第一序列具体为:
[0038] 根据所述历史数据追溯方向以及每一个第一URL对应的历史数据的时间,对所有的第一URL进行排序,得到第一序列。
[0039] 从上述描述可知,通过上述方法,能够快速准确地对每一个第一URL进行排序。
[0040] 进一步的,所述S1具体为:
[0041] 获取执行追溯历史数据对应的任务起始时间,得到第一时间;
[0042] 获取所需追溯的历史数据的时间起点值,得到第二时间;
[0043] 获取追溯历史数据的时间方向,得到历史数据追溯方向;
[0044] 获取每一次连续追溯历史数据的天数,即为所述第一阈值。
[0045] 进一步的,所述根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL具体为:
[0046] 根据第二时间、历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;
[0047] 所述第一URL包括多个第一子URL,第一子URL的数量与所述第一阈值相等。
[0048] 从上述描述可知,通过上述方法,能够准确地配置每一次待爬取的历史数据对应的URL,在执行过程中无需人工干预,能够提高历史数据的追溯爬取的效率;同时,上述的每一个第一URL均包括多个的第一子URL,例如,每次追溯的历史数据的天数为5天,而每一天的历史数据均与一个子URL对应,即每次追溯的子URL为5个,上述过程可进一步提高系统在执行历史数据追溯爬取时的效率。
[0049] 进一步的,所述S32具体为:
[0050] 根据第二URL,得到多个第二子URL;
[0051] 根据所述历史数据追溯方向以及每一个第二子URL对应的历史数据的时间,依次爬取每一个第二子URL对应网页上的数据;
[0052] 所述S33具体为:
[0053] 当一第二子URL对应网页上的数据获取完毕时,将该第二子URL存储于缓存中;
[0054] 判断所有的第二子URL对应网页上的数据是否均爬取完毕,若是,则将预设的第r个标识值置为预设第一值,并将第r个标识值存储在缓存中,所述r的初始值为1,每一个标识值的初始值为预设第二值。
[0055] 进一步的,在每一次爬取历史数据前,判断上一次爬取历史数据是否存在中断情况;
[0056] 若是,则获取上一次爬取历史数据对应的第一URL,得到第四URL;
[0057] 根据第四URL,得到多个的第四子URL;
[0058] 根据所有的第四子URL,获取缓存中未存储的第四子URL,得到一个以上的第五子URL;
[0059] 根据一个以上的第五子URL,得到第五URL,将第二URL更新为所述第五URL;
[0060] 执行步骤S38。
[0061] 从上述描述可知,在每一个子URL对应网页上的数据获取完毕后,均将其存储于缓存中,可避免此次所有的子URL对应的网页的数据并未爬取完毕时,而发生中断,在再次执行时,需要重新对已经执行过的子URL对应网页上的数据进行再次获取,而存在效率较低的问题。
[0062] 请参照图2,本发明提供了一种历史数据的追溯爬取终端,包括存储器1、处理器2及存储在存储器1上并可在处理器2上运行的计算机程序,所述处理器2执行所述计算机程序时实现以下步骤:
[0063] S1:设定历史数据追溯方向,以及每一次爬取历史数据量对应的第一阈值;
[0064] S2:根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;将多个第一URL进行排序,得到第一序列;
[0065] S3:每隔预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据。
[0066] 从上述描述可知,本发明提供的一种历史数据的追溯爬取终端,在历史数据的追溯爬取过程,只需要根据历史数据追溯方向及第一阈值,即可得到待多次爬取的历史数据分别对应的多个第一URL,并将其进行排序,得到第一序列,上述追溯爬取历史数据过程中,只需要配置一次,即可得到第一序列,而后按照预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据,可得到待爬取的所有历史数据,上述过程无需要人工参与,能够提高历史数据的追溯爬取的效率。
[0067] 进一步的,所述的一种历史数据的追溯爬取终端,所述S3具体为:
[0068] S31:获取第一序列中排序在最前的第一URL,得到待爬取数据对应的第二 URL;预设变量r,所述r的初始值为1;
[0069] S32:爬取第二URL对应网页上的数据;
[0070] S33:若第二URL对应网页上的数据均获取完毕,则将预设的第r个标识值置为预设第一值,并将第r个标识值以及第二URL存储在缓存中,每一个标识值的初始值均为预设第二值;
[0071] S34:令r=r+1;
[0072] S35:在预设第三时间获取缓存中最大的r值,得到第三值;所述预设第三时间=预设第四时间+预设时间;所述预设第四时间为开始爬取第二URL对应网页上的数据对应的时间点;
[0073] S36:将第三值加一,得到第四值;
[0074] S37:根据所述第四值,获取第一序列中排序为第四值对应的第一URL,得到第三URL,将第二URL更新为所述第三URL;
[0075] S38:重复执行步骤S32-S37,直至接收到爬取数据结束指令或所有的历史数据均爬取完毕为止。
[0076] 从上述描述可知,通过上述终端,能够准确无误地获取每一次待爬取的历史数据,并且能够在每一次爬取历史数据时均是先从缓存中获取最大的r值,从而确定下一次需要爬取对应的URL,能够解决在任务意外中断时,还需要人工检查断点状况,针对性地进行调整,重新对追溯爬取历史数据进行配置的问题。
[0077] 优选的,所述缓存为redis缓存数据库,在任务执行过程中发生中断时,该缓存中的数据并不会丢失,能够提高数据爬取的稳定性。
[0078] 进一步的,所述的一种历史数据的追溯爬取终端,所述将多个第一URL进行排序,得到第一序列具体为:
[0079] 根据所述历史数据追溯方向以及每一个第一URL对应的历史数据的时间,对所有的第一URL进行排序,得到第一序列。
[0080] 从上述描述可知,通过上述终端,能够快速准确地对每一个第一URL进行排序。
[0081] 进一步的,所述的一种历史数据的追溯爬取终端,所述S1具体为:
[0082] 获取执行追溯历史数据对应的任务起始时间,得到第一时间;
[0083] 获取所需追溯的历史数据的时间起点值,得到第二时间;
[0084] 获取追溯历史数据的时间方向,得到历史数据追溯方向;
[0085] 获取每一次连续追溯历史数据的天数,即为所述第一阈值。
[0086] 进一步的,所述根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL具体为:
[0087] 根据第二时间、历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;
[0088] 所述第一URL包括多个第一子URL,第一子URL的数量与所述第一阈值相等。
[0089] 从上述描述可知,通过上述终端,能够准确地配置每一次待爬取的历史数据对应的URL,在执行过程中无需人工干预,能够提高历史数据的追溯爬取的效率;同时,上述的每一个第一URL均包括多个的第一子URL,例如,每次追溯的历史数据的天数为5天,而每一天的历史数据均与一个子URL对应,即每次追溯的子URL为5个,上述过程可进一步提高系统在执行历史数据追溯爬取时的效率。
[0090] 进一步的,所述的一种历史数据的追溯爬取终端,所述S32具体为:
[0091] 根据第二URL,得到多个第二子URL;
[0092] 根据所述历史数据追溯方向以及每一个第二子URL对应的历史数据的时间,依次爬取每一个第二子URL对应网页上的数据;
[0093] 所述S33具体为:
[0094] 当一第二子URL对应网页上的数据获取完毕时,将该第二子URL存储于缓存中;
[0095] 判断所有的第二子URL对应网页上的数据是否均爬取完毕,若是,则将预设的第r个标识值置为预设第一值,并将第r个标识值存储在缓存中,所述r的初始值为1,每一个标识值的初始值为预设第二值。
[0096] 进一步的,所述的一种历史数据的追溯爬取终端,在每一次爬取历史数据前,判断上一次爬取历史数据是否存在中断情况;
[0097] 若是,则获取上一次爬取历史数据对应的第一URL,得到第四URL;
[0098] 根据第四URL,得到多个的第四子URL;
[0099] 根据所有的第四子URL,获取缓存中未存储的第四子URL,得到一个以上的第五子URL;
[0100] 根据一个以上的第五子URL,得到第五URL,将第二URL更新为所述第五URL;
[0101] 执行步骤S38。
[0102] 从上述描述可知,在每一个子URL对应网页上的数据获取完毕后,均将其存储于缓存中,可避免此次所有的子URL对应的网页的数据并未爬取完毕时,而发生中断,在再次执行时,需要重新对已经执行过的子URL对应网页上的数据进行再次获取,而存在效率较低的问题。
[0103] 请参照图1,本发明的实施例一为:
[0104] 本发明提供了一种历史数据的追溯爬取方法,包括以下步骤:
[0105] S1:设定历史数据追溯方向,以及每一次爬取历史数据量对应的第一阈值;
[0106] 其中,所述S1具体为:
[0107] 获取执行追溯历史数据对应的任务起始时间,得到第一时间;
[0108] 获取所需追溯的历史数据的时间起点值,得到第二时间;
[0109] 获取追溯历史数据的时间方向,得到历史数据追溯方向;
[0110] 获取每一次连续追溯历史数据的天数,即为所述第一阈值。
[0111] 在具体的实施方式中,上述的历史数据追溯方向有两情情况,即正向或负向;如果为正向,则沿第二时间向后依次获取有历史数据,例如第二时间为2016 年3月11日,则后面获取的历史数据为2016年3月11日-当前日期(或用户指定时间);如果为负向,则沿第二时间向前依次获取有历史数据,例如第二时间为2016年3月11日,则后面获取的历史数据为用户指定时间(用户指定时间早于2016年3月11日)-2016年3月11日。
[0112] 在具体的实施方式中,上述第一时间为任务开始执行的时间,该时间可以是当前时间,或者是未来的某个时间。
[0113] 在具体的实施方式中,获取每一次连续追溯历史数据的天数,即为所述第一阈值,例如,用户设定的为每一次追溯五天的历史数据,则第一阈值为5。
[0114] S2:根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;将多个第一URL进行排序,得到第一序列;
[0115] 其中,上述的URL为历史数据对应的地址。
[0116] 其中,所述S2具体为:
[0117] 根据第二时间、历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;
[0118] 所述第一URL包括多个第一子URL,第一子URL的数量与所述第一阈值相等;
[0119] 根据所述历史数据追溯方向以及每一个第一URL对应的历史数据的时间,对所有的第一URL进行排序,得到第一序列。
[0120] 其中,在排序过程中,按照从远至近的时间顺序(历史数据追溯方向为正向时)对所有的第一URL进行排序,或者按照从近至远的时间顺序(历史数据追溯方向为负向时)对所有的第一URL进行排序。
[0121] S3:每隔预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据;
[0122] 其中,所述S3具体为:
[0123] S31:获取第一序列中排序在最前的第一URL,得到待爬取数据对应的第二 URL;预设变量r,所述r的初始值为1;
[0124] S32:爬取第二URL对应网页上的数据;
[0125] 其中,所述S32具体为:
[0126] 根据第二URL,得到多个第二子URL;
[0127] 根据所述历史数据追溯方向以及每一个第二子URL对应的历史数据的时间,依次爬取每一个第二子URL对应网页上的数据;
[0128] S33:若第二URL对应网页上的数据均获取完毕,则将预设的第r个标识值置为预设第一值,并将第r个标识值以及第二URL存储在缓存中,每一个标识值的初始值均为预设第二值;
[0129] 其中,所述S33具体为:
[0130] 当一第二子URL对应网页上的数据获取完毕时,将该第二子URL存储于缓存中;
[0131] 判断所有的第二子URL对应网页上的数据是否均爬取完毕,若是,则将预设的第r个标识值置为预设第一值,并将第r个标识值存储在缓存中,所述r的初始值为1,每一个标识值的初始值为预设第二值。
[0132] 优选的,所述预设第一值为1,预设第二值为0;当标识值为1时,代表已经对所有的第二子URL对应网页上的数据均爬取完毕。
[0133] S34:令r=r+1;
[0134] S35:在预设第三时间获取缓存中最大的r值,得到第三值;所述预设第三时间=预设第四时间+预设时间;所述预设第四时间为开始爬取第二URL对应网页上的数据对应的时间点;
[0135] 其中,预设第三时间为一时间点,预设时间为一时间段,例如一天,预设第四时间为时间点。
[0136] S36:将第三值加一,得到第四值;
[0137] S37:根据所述第四值,获取第一序列中排序为第四值对应的第一URL,得到第三URL,将第二URL更新为所述第三URL;
[0138] 其中,所述S37具体为:
[0139] 根据所述第四值,获取第一序列中排序为第四值对应的第一URL,得到第三URL;
[0140] 判断上一次爬取历史数据是否存在中断情况;
[0141] 若是,则根据第三URL,得到第四URL,此时第三URL与第四URL相同;根据第四URL,得到多个的第四子URL;根据所有的第四子URL,获取缓存中未存储的第四子URL,得到一个以上的第五子URL;根据一个以上的第五子 URL,得到第五URL,将第二URL更新为所述第五URL;执行步骤S38;
[0142] 若否,则第二URL更新为所述第三URL,执行步骤S38。
[0143] S38:重复执行步骤S32-S37,直至接收到爬取数据结束指令或所有的历史数据均爬取完毕为止。
[0144] 请参照图2,本发明的实施例二为:
[0145] 本发明提供了一种历史数据的追溯爬取终端,包括存储器1、处理器2及存储在存储器1上并可在处理器2上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0146] S1:设定历史数据追溯方向,以及每一次爬取历史数据量对应的第一阈值;
[0147] 其中,所述S1具体为:
[0148] 获取执行追溯历史数据对应的任务起始时间,得到第一时间;
[0149] 获取所需追溯的历史数据的时间起点值,得到第二时间;
[0150] 获取追溯历史数据的时间方向,得到历史数据追溯方向;
[0151] 获取每一次连续追溯历史数据的天数,即为所述第一阈值。
[0152] 在具体的实施方式中,上述的历史数据追溯方向有两情情况,即正向或负向;如果为正向,则沿第二时间向后依次获取有历史数据,例如第二时间为2016 年3月11日,则后面获取的历史数据为2016年3月11日-当前日期(或用户指定时间);如果为负向,则沿第二时间向前依次获取历史数据,例如第二时间为2016年3月11日,则后面获取的历史数据为用户指定时间(用户指定时间早于2016年3月11日)-2016年3月11日。
[0153] 在具体的实施方式中,上述第一时间为任务开始执行的时间,该时间可以是当前时间,或者是未来的某个时间。
[0154] 在具体的实施方式中,获取每一次连续追溯历史数据的天数,即为所述第一阈值,例如,用户设定的为每一次追溯五天的历史数据,则第一阈值为5。
[0155] S2:根据历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;将多个第一URL进行排序,得到第一序列;
[0156] 其中,上述的URL为历史数据对应的地址。
[0157] 其中,所述S2具体为:
[0158] 根据第二时间、历史数据追溯方向以及第一阈值,获取待多次爬取的历史数据分别对应的多个第一URL;
[0159] 所述第一URL包括多个第一子URL,第一子URL的数量与所述第一阈值相等;
[0160] 根据所述历史数据追溯方向以及每一个第一URL对应的历史数据的时间,对所有的第一URL进行排序,得到第一序列。
[0161] 其中,在排序过程中,按照从远至近的时间顺序(历史数据追溯方向为正向时)对所有的第一URL进行排序,或者按照从近至远的时间顺序(历史数据追溯方向为负向时)对所有的第一URL进行排序。
[0162] S3:每隔预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据;
[0163] 其中,所述S3具体为:
[0164] S31:获取第一序列中排序在最前的第一URL,得到待爬取数据对应的第二 URL;预设变量r,所述r的初始值为1;
[0165] S32:爬取第二URL对应网页上的数据;
[0166] 其中,所述S32具体为:
[0167] 根据第二URL,得到多个第二子URL;
[0168] 根据所述历史数据追溯方向以及每一个第二子URL对应的历史数据的时间,依次爬取每一个第二子URL对应网页上的数据;
[0169] S33:若第二URL对应网页上的数据均获取完毕,则将预设的第r个标识值置为预设第一值,并将第r个标识值以及第二URL存储在缓存中,每一个标识值的初始值均为预设第二值;
[0170] 其中,所述S33具体为:
[0171] 当一第二子URL对应网页上的数据获取完毕时,将该第二子URL存储于缓存中;
[0172] 判断所有的第二子URL对应网页上的数据是否均爬取完毕,若是,则将预设的第r个标识值置为预设第一值,并将第r个标识值存储在缓存中,所述r的初始值为1,每一个标识值的初始值为预设第二值。
[0173] 优选的,所述预设第一值为1,预设第二值为0;当标识值为1时,代表已经对所有的第二子URL对应网页上的数据均爬取完毕。
[0174] S34:令r=r+1;
[0175] S35:在预设第三时间获取缓存中最大的r值,得到第三值;所述预设第三时间=预设第四时间+预设时间;所述预设第四时间为开始爬取第二URL对应网页上的数据对应的时间点;
[0176] 其中,预设第三时间为一时间点,预设时间为一时间段,例如一天,预设第四时间为时间点。
[0177] S36:将第三值加一,得到第四值;
[0178] S37:根据所述第四值,获取第一序列中排序为第四值对应的第一URL,得到第三URL,将第二URL更新为所述第三URL;
[0179] 其中,所述S37具体为:
[0180] 根据所述第四值,获取第一序列中排序为第四值对应的第一URL,得到第三URL;
[0181] 判断上一次爬取历史数据是否存在中断情况;
[0182] 若是,则根据第三URL,得到第四URL,此时第三URL与第四URL相同;根据第四URL,得到多个的第四子URL;根据所有的第四子URL,获取缓存中未存储的第四子URL,得到一个以上的第五子URL;根据一个以上的第五子 URL,得到第五URL,将第二URL更新为所述第五URL;执行步骤S38;
[0183] 若否,则第二URL更新为所述第三URL,执行步骤S38。
[0184] S38:重复执行步骤S32-S37,直至接收到爬取数据结束指令或所有的历史数据均爬取完毕为止。
[0185] 本发明的实施例三为:
[0186] 1、创建5个配置项:任务执行基准时间task_begin_time(第一时间),用来追踪工作执行时间的起点,即第一段任务的执行时间;历史数据追溯时间初值data_begin_time(第二时间),作为第一段任务中追溯历史数据的时间起点,后续分段任务的历史数据则以该时间点作为参照点,重新计算出时间起点;追溯方向trace_backward(历史数据追溯方向),来控制追溯的日期方向是正向或逆向;每次追溯的时间单元量time_num(第一阈值),控制每分段任务的数据获取量;任务续接阈值follow_threshold,在中断重启时,通过它来判断中断任务剩下部分要独立花一天时间执行,还是可以拼接进下个任务段一起执行。
[0187] 2、缓存(例如redis)里创建用来存储任务执行状态参数的字段:任务完成标志位r_finish_flag(第r个标识值),用来判断最近一次任务是否完成,0为未完成,1为已完成;任务执行日期r_task_time,登记最近一次任务的执行日期;该段任务已完成日期量r_finish_num,登记当前任务段已经完成了几天的历史数据获取,例如,配置值time_num=5,表示每天要获取5天的历史数据,若执行过程中r_finish_num=3,表示今天已经获取了3天的历史数据,只有当 r_finish_num=time_num时,r_finish_flag才会置1,表示今天任务全部完成;执行日期矫正值r_offset_num,初始值为0,随着任务异常中断的出现,该值为了断点续接,会进行调整。
[0188] 另外,创建访问过的url集合r_finished_urls,利用redis集合类型数据唯一性的特征登记历来已执行的url,实现整个任务周期的url去重。
[0189] 3、分析目标站点历史数据页url请求字段的时间值特征,并根据需求对5 个配置项进行配置。例如,假设目标站点url的时间字段是YYYY-MM-DD的日期格式,时间基本单位是天;假设任务计划从2019年1月1日开始执行,要追溯历史数据站点2018年01月01日之前的数据,每天追溯5天的历史数据,那么则可将task_begin_time配置为2019-01-01,data_begin_time配置为2018-01-01, time_num配置为5;由于是要之前的数据,故追溯的日期方向是逆向(往后为正向,往前为逆向),因而此处trace_backward为-1,情况若反之则为1;假设要求若出现中断,且中断日完成大于3天的历史数据的话,剩余2天的数据就可以与下一任务段的数据一起获取,则follow_threshold设置为3。
[0190] 4、启动任务,任务首先检测redis的r_finish_flag,若该值为1,表示上次任务已顺利结束,则进入日常模式;反之若r_finish_flag为0,表示上次任务执行异常,未完成,需进入断点恢复模式。
[0191] 5、任务首先进入url生成阶段,日常模式和断点恢复模式的区别主要就在于该阶段的日期列表生成过程。
[0192] 在日常模式下,首先比较当前时间now和redis里的(上次)任务完成日期 r_task_time,如果now-r_task_time大于1天,表示中间有几天没执行任务,为弥补空白期对目标数据日期定位的影响,需要对redis的r_offset_time(其中 r_offset_time的初始值为0;)进行调整,即
[0193] r_offset_time=r_offset_time+(now-r_task_time–1);
[0194] 例如,任务第一次出现1天空白期时,r_offset_time=1,表示需要将日期多偏移1天进行校正,第二次又出现1天空白期,那么r_offset_time=2,表示以后的日期都要多偏移两天。而后立刻将redis的r_task_time设为当前日期,接着根据now、task_begin_time、r_offset_time算出实际的目标数据日期偏移值 offset,即
[0195] offset=(now-task_begin_time)+r_offset_time;
[0196] 需要请求的历史数据页的日期范围则为:
[0197] data_begin_time+trace_backward*(offset*time_num+1);
[0198] 到:
[0199] data_begin_time+trace_backward*(offset*time_num+time_num);
[0200] 之间。日期生成后,r_finish_flag置0。
[0201] 在断点恢复下,首先判断断点日期是否为now。若是,则按照日常模式继续执行,在任务下一阶段会有url去重操作,会将断点前已完成的url过滤,从而避免重复任务。若断点日期非今日,首先,对redis的r_offset_time进行调整,并计算出实际的目标数据日期偏移值offset,且将redis的r_task_time设为当前日期,方式同日常模式;然后,比较上一次任务已完成任务量r_finish_num(当 r_finish_num<0时,需先进行一次r_finish_num=0-r_finish_num的操作,在后文的情况2里会进行说明)与阈值follow_threshold,对两种情况采取不同的任务衔接策略:
[0202] 情况1:r_finish_num
[0203] 情况2:r_finish_num>=follow_threshold,说明上一次任务截至中断前,任务完成度高,剩余任务较少,允许接入下一批任务一起进行。由于总任务区间跨度为2天,需将r_finish_num=0-r_finish_num,转变为负数存储,这样就将 r_finish_num=time_num的判定区间就扩展为实际的区间了。假如在此后再次中断,当下次启动时访问到r_finish_num为负数时,也可以再次通过r_finish_num =0-r_finish_num计算重新获取断点日的任务完成量。
[0204] 之后,生成2个工作日所包含的任务日期列表,需要请求的历史数据页的日期范围则为:
[0205] data_begin_time+trace_backward*(offset*time_num+1);
[0206] 到:
[0207] data_begin_time+trace_backward*(offset*time_num+2*time_num);
[0208] 之间。其中,断点日包含的已完成的那部分日期,会在后续的url去重中过滤掉。
[0209] 两种模式最后均会根据上述获取的日期参数,拼接生成请求url,准备开始爬取数据。
[0210] 6、url生成后,会进入Redis进行去重筛选,根据是否在集合r_finished_urls 登记过,来判断url是否有效,放弃无效链接,并将有效url依序排进队列,等待请求。
[0211] 7、接下来是数据请求获取阶段,每完成1个入口url任务(即1天历史数据量),则进行一次任务状态的登记与判定:首先,在r_finished_urls登记完成的 url,并将r_finish_num加1;其次,判断r_finish_num与time_num是否相等,相等则说明该段任务已全部完成,对状态标志位进行置位操作(r_finish_flag置 1,r_finish_num置为0),结束这段任务,若不相等,进一步判断r_finish_num 是否为0,若等0,说明该任务是在中断模式下完成了中断日的最后一个任务,准备进入下一批次的任务,由于在两天任务量的特殊情况下,偏移值 r_offset_time是根据第一天定的,因此在进入第二批任务的时候,需要将 r_offset_time=r_offset_time–1,进一步修正该偏移值。后续操作直至 r_finish_num与time_num相等,完成任务。
[0212] 8、所有获取的数据,经过实时地数据清洗、整理后,存储在数据库(如mysql) 中。
[0213] 9、通过任务计划等定时配置,实现每天在固定时间点启动该系统,从而实现上述任务的自动执行。
[0214] 10、倘若需要历史数据中的某段节点数据,也可通过临时修正上述配置从而灵活地实现。
[0215] 本实施例中的参数说明,请表1和表2:
[0216] 表1:配置参数说明
[0217]
[0218]
[0219] 表2,任务状态参数说明
[0220]
[0221] 综上所述,本发明提供的一种历史数据的追溯爬取方法及终端,在历史数据的追溯爬取过程,只需要根据历史数据追溯方向及第一阈值,即可得到待多次爬取的历史数据分别对应的多个第一URL,并将其进行排序,得到第一序列,上述追溯爬取历史数据过程中,只需要配置一次,即可得到第一序列,而后按照预设时间依次爬取第一序列中的每一个第一URL对应网页上的数据,可得到待爬取的所有历史数据,上述过程无需要人工参与,能够提高历史数据的追溯爬取的效率。进一步的,通过上述方法,能够准确无误地获取每一次待爬取的历史数据,并且能够在每一次爬取历史数据时均是先从缓存中获取最大的r值,从而确定下一次需要爬取对应的URL,能够解决在任务意外中断时,还需要人工检查断点状况,针对性地进行调整,重新对追溯爬取历史数据进行配置的问题。进一步的,通过上述方法,能够准确地配置每一次待爬取的历史数据对应的URL,在执行过程中无需人工干预,能够提高历史数据的追溯爬取的效率;同时,上述的每一个第一URL均包括多个的第一子URL,例如,每次追溯的历史数据的天数为5天,而每一天的历史数据均与一个子URL对应,即每次追溯的子URL为5个,上述过程可进一步提高系统在执行历史数据追溯爬取时的效率。进一步的,在每一个子URL对应网页上的数据获取完毕后,均将其存储于缓存中,可避免此次所有的子URL对应的网页的数据并未爬取完毕时,而发生中断,在再次执行时,需要重新对已经执行过的子URL对应网页上的数据进行再次获取,而存在效率较低的问题。
[0222] 以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。