发明内容
本发明的主要目的在于提供一种爬虫程序工作状态的判断方法和装置,以解决现有技术中判断爬虫程序是否结束的准确性差的问题。
为了实现上述目的,根据本发明实施例的一个方面,提供了一种爬虫程序工作状态的判断方法。根据本发明的爬虫程序工作状态的判断方法包括:判断爬虫程序的链接分析模块接收到的第一结果数据是否为第一爬取请求所产生的数据,其中,第一爬取请求为链接分析模块发出的最后一个请求;若链接分析模块接收到的第一结果数据为第一爬取请求所产生的数据,则判断第一结果数据是否产生第二爬取请求,其中,第二爬取请求为解析第一结果数据产生的请求;若第一结果数据未产生第二爬取请求,则判断出爬虫程序的工作状态为结束爬取;若第一结果数据产生第二爬取请求,则判断出爬虫程序的工作状态为正在爬取。
进一步地,判断第一结果数据是否产生第二爬取请求包括:若链接分析模块接收到的第一结果数据为第一爬取请求所产生的数据,则开启计时器计时;在预设时间段内判断链接分析模块是否输出第二爬取请求;若链接分析模块输出第二爬取请求,则判断出第一结果数据产生第二爬取请求,停止并重置计时器;若链接分析模块未输出第二爬取请求,则判断出第一结果数据未产生第二爬取请求。
进一步地,在判断爬虫程序的链接分析模块接收到的第一结果数据是否为第一爬取请求所产生的数据之前,判断方法还包括:设置链接分析模块输出的各个第三爬取请求的第一标签;设置执行第三爬取请求得到第一结果数据的第二标签;建立第一标签与第二标签的映射关系,其中,第三爬取请求包括第一爬取请求;判断爬虫程序的链接分析模块接收到的第一结果数据是否为第一爬取请求所产生的数据包括:通过第一标签和第二标签的映射关系判断第一结果数据是否为第一爬取请求所产生的数据。
进一步地,在设置链接分析模块输出的各个第三爬取请求的第一标签的同时,判断方法还包括:保存第一标签,停止并重置计时器的计时。
进一步地,在判断出爬虫程序的工作状态为结束爬取之后,判断方法还包括:关闭爬虫程序的链接分析模块和页面爬取模块。
为了实现上述目的,根据本发明实施例的另一方面,提供了一种爬虫程序工作状态的判断装置。
根据本发明的爬虫程序工作状态的判断装置包括:第一判断模块,用于判断爬虫程序的链接分析模块接收到的第一结果数据是否为第一爬取请求所产生的数据,其中,第一爬取请求为链接分析模块发出的最后一个请求;第二判断模块,用于若链接分析模块接收到的第一结果数据为第一爬取请求所产生的数据,则判断第一结果数据是否产生第二爬取请求,其中,第二爬取请求为解析第一结果数据产生的请求;第一确定模块,用于若第一结果数据未产生第二爬取请求,则判断出爬虫程序的工作状态为结束爬取;第二确定模块,用于若第一结果数据产生第二爬取请求,则判断出爬虫程序的工作状态为正在爬取。
进一步地,第二判断模块包括:启动模块,用于若链接分析模块接收到的第一结果数据为第一爬取请求所产生的数据,则开启计时器计时;第二判断子模块,用于在预设时间段内判断链接分析模块是否输出第二爬取请求;第三确定模块,用于若链接分析模块输出第二爬取请求,则判断出第一结果数据产生第二爬取请求,停止并重置计时器;第四确定模块,用于若链接分析模块未输出第二爬取请求,则判断出第一结果数据未产生第二爬取请求。
进一步地,判断装置还包括:第一设置模块,用于在判断爬虫程序的链接分析模块接收到的第一结果数据是否为第一爬取请求所产生的数据之前,设置链接分析模块输出的各个第三爬取请求的第一标签;第二设置模块,用于设置执行第三爬取请求得到第一结果数据的第二标签;建立第一标签与第二标签的映射关系,其中,第三爬取请求包括第一爬取请求;第一判断模块包括:第一判断子模块,用于通过第一标签和第二标签的映射关系判断第一结果数据是否为第一爬取请求所产生的数据。
进一步地,判断装置还包括:保存模块,用于在设置链接分析模块输出的各个第三爬取请求的第一标签的同时,保存第一标签,停止并重置计时器的计时。
进一步地,判断装置还包括:关闭模块,用于在判断出爬虫程序的工作状态为结束爬取之后,关闭爬虫程序的链接分析模块和页面爬取模块。
采用本发明,通过判断爬虫程序的链接分析模块发出的第一爬取请求与接收到的第一结果数据的关系来判断是否当前爬虫程序是否结束。具体地,若链接分析模块接收到第一结果数据,则分析该第一结果数据是否为第一爬取请求所产生,若该第一结果数据是第一爬取请求所产生,则判断第一结果数据是否产生第二爬取请求,若第一结果数据产生第二爬取请求,则判断出链接分析模块接收到第一结果数据之后,产生了新的爬取请求,爬虫程序仍处于运行状态;若第一结果数据不产生第二爬取请求则判断出链接分析模块接收到第一结果数据之后,未产生新的爬取请求,爬虫程序的工作状态为结束。采用本发明,解决了现有技术中判断爬虫程序是否结束的准确性差的问题,实现了准确判断爬虫程序的工作状态。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例提供了一种爬虫程序工作状态的判断方法。图1是根据本发明实施例的爬虫程序工作状态的判断方法的流程图。如图1所示,该方法可以包括步骤如下:
步骤S102,判断爬虫程序的链接分析模块接收到的第一结果数据是否为第一爬取请求所产生的数据。
其中,第一爬取请求为链接分析模块发出的最后一个请求。
步骤S104,若链接分析模块接收到的第一结果数据为第一爬取请求所产生的数据,则判断第一结果数据是否产生第二爬取请求。
其中,第二爬取请求为解析第一结果数据产生的请求。
步骤S106,若第一结果数据未产生第二爬取请求,则判断出爬虫程序的工作状态为结束爬取。
步骤S108,若第一结果数据产生第二爬取请求,则判断出爬虫程序的工作状态为正在爬取。
采用本发明,通过判断爬虫程序的链接分析模块发出的第一爬取请求与接收到的第一结果数据的关系来判断是否当前爬虫程序是否结束。具体地,若链接分析模块接收到第一结果数据,则分析该第一结果数据是否为第一爬取请求所产生,若该第一结果数据是第一爬取请求所产生,则判断第一结果数据是否产生第二爬取请求,若第一结果数据产生第二爬取请求,则判断出链接分析模块接收到第一结果数据之后,产生了新的爬取请求,爬虫程序仍处于运行状态;若第一结果数据不产生第二爬取请求则判断出链接分析模块接收到第一结果数据之后,未产生新的爬取请求,爬虫程序的工作状态为结束。采用本发明,解决了现有技术中判断爬虫程序是否结束的准确性差的问题,实现了准确判断爬虫程序的工作状态。
通过本发明的上述实施例,无需同时分别判断页面爬取模块和链接分析模块中正在爬取的数量和待爬取任务的数量之间的关系,简化了判断条件,实现了对判断爬虫程序的结束与否的简单判断。
根据本发明的上述实施例,判断第一结果数据是否产生第二爬取请求可以包括:若链接分析模块接收到的第一结果数据为第一爬取请求所产生的数据,则开启计时器计时;在预设时间段内判断链接分析模块是否输出第二爬取请求;若链接分析模块输出第二爬取请求,则判断出第一结果数据产生第二爬取请求,停止并重置计时器;若链接分析模块未输出第二爬取请求,则判断出第一结果数据未产生第二爬取请求。
具体地,若链接分析模块接收到的第一结果数据为第一爬取请求所产生的数据时则开启计时器计时,并判断该第一结果数据回到链接分析模块后,是否有新的第二爬取请求生成,当计时器计时满预设时间段之前产生第二爬取请求生成,则停止并重置计数器;当计时器计时满预设时间段时仍无第二爬取请求生成,则判断出第一结果数据未产生第二爬取请求。
需要进一步说明的是,上述实施例中预设时间段可以为3秒,此方法主要是利用了链接分析模块的运算皆为内存计算,能在可预估在一定时间内完成运算,可以为3秒。
根据本发明的上述实施例,在判断爬虫程序的链接分析模块接收到的第一结果数据是否为第一爬取请求所产生的数据之前,判断方法还可以包括:设置链接分析模块输出的各个第三爬取请求的第一标签;设置执行第三爬取请求得到第一结果数据的第二标签;建立第一标签与第二标签的映射关系,其中,第三爬取请求包括第一爬取请求;判断爬虫程序的链接分析模块接收到的第一结果数据是否为第一爬取请求所产生的数据包括:通过第一标签和第二标签的映射关系判断第一结果数据是否为第一爬取请求所产生的数据。
其中,上述实施例中的第一标签与第二标签的映射关系可以为相等关系,即,第一标签的值等于第二标签的值,即爬取结果与对应的爬取请求使用同样的标签。
通过本发明的上述实施例,通过为爬取请求打上唯一标签,并判定最后离开链接分析模块的标签回到链接分析模块后,是否有新的爬取请求生成,若未产生新的爬取请求,爬虫程序的工作状态为结束,实现了准确判断爬虫程序的工作状态。
下面结合图2详述本发明的上述实施例,如图2所示,在链接分析模块90中初始化一个计时器,用于计时;标签设置模块91用于为链接分析模块的输出的每一个第三爬取请求设置第一标签;页面设置模块80用于为执行第三爬取请求得到第一结果数据设置第二标签;同时建立第一标签和第二标签的映射关系(在该实施例中第一标签和第二标签相同),标签检查模块92通过该映射关系判断第一结果数据是否为第一爬取请求所产生的数据。其中,标签设置模块91和标签检查模块92为链接分析模块90的子模块。图2中的步骤S304是指第三爬取请求由链接分析模块发送至页面爬取模块,步骤S302是指第一结果数据由页面爬取模块发送至链接分析模块。
需要进一步说明的是,标签设置模块91会不断更新第一标签,每一个第三爬取请求输出时,标签设置模块都会赋给它一个新的标签,并将这个新的标签记为第一标签。
通过本发明的上述实施例,无需追踪爬虫程序中待爬取请求数量和正在运行的爬取请求数量这两个变量,从而规避了线程安全相关的复杂性和竞争风险。本发明的上述实施例仅需对第三爬取请求和第一结果数据设置唯一标签(即第一标签和第二标签),并通过标签判定最后离开链接分析模块的标签回到链接分析模块后,是否有新的爬取请求生成,若无新请求生成,开启计时器计时,当一段时间之后,仍无新请求生成,则判定爬取结束,从而准确判断爬虫程序的结束状态。
需要进一步说明的是,在设置链接分析模块输出的各个第三爬取请求的第一标签的同时,判断方法还可以包括:保存第一标签,停止并重置计时器的计时。
在上述实施例中,每输出一个爬取请求,标签设置模块91为其设置一个标签,同时更新第一标签,并且停止并重置计时器的计时。
具体地,在上述实施例可用一个数据表保存所有的第三爬取请求和对应的第一标签,在判断是否结束爬虫程序时,可从该数据表中读取数据,通过使用这个数据表能够提高查询效率,达到了简化对爬虫程序结束条件的简化的效果,使得爬虫程序的结束更容易判断。
在本发明的上述实施例中,在判断出爬虫程序的工作状态为结束爬取之后,判断方法还可以包括:关闭爬虫程序的链接分析模块和页面爬取模块。
在本发明的上述实施例中,判定最后离开链接分析模块的爬取请求的结果回到链接分析模块后,是否有新的爬取请求生成;若无新请求生成,则开启计时器计时,当一段时间之后,仍无新爬取请求生成,则判定爬取结束,此时可关闭链接分析模块与页面爬取模块。
在上述实施例中,无需分析待爬取请求数量和正在进行的爬取请求数量两个变量,而是为每一个第三爬取请求设置第一标签、为每一个第一结果数据设置第二标签,分别将所有第三爬取请求和第一结果数据当成一个整体。在判断过程中,仅当第一标签和第二标签匹配(如,相同)时,即第一结果数据是链接分析模块所发出的最后一个请求(即上述实施例中的第一爬取请求)所产生的时候,开启计时器,若经过预设时间段链接分析模块无新的爬取请求(即上述实施例中的第二爬取请求)输出,则判定爬虫程序结束,即关闭链接分析模块和页面爬取模块。通过本发明的上述方法,达到了对爬虫程序判定时条件简单、判定效率高且不易出错的效果。
通过本发明上述实施例,仅需对模块边界的输出打上唯一标签,并通过追踪“当前最后一个爬取请求”并利用链接分析的性能可预判性,巧妙地得到结束条件的触发,具有逻辑简单、无竞争风险且判断结果准确地优点。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本发明实施例还提供了一种爬虫程序工作状态的判断装置。图3是根据本发明实施例的爬虫程序工作状态的判断装置的示意图。如图3所示,该判断装置可以包括模块如下:第一判断模块10、第二判断模块30、第一确定模块50以及第二确定模块70。
其中,第一判断模块10用于判断爬虫程序的链接分析模块接收到的第一结果数据是否为第一爬取请求所产生的数据,其中,第一爬取请求为链接分析模块发出的最后一个请求;第二判断模块30用于若链接分析模块接收到的第一结果数据为第一爬取请求所产生的数据,则判断第一结果数据是否产生第二爬取请求,其中,第二爬取请求为解析第一结果数据产生的请求;第一确定模块50用于若第一结果数据未产生第二爬取请求,则判断出爬虫程序的工作状态为结束爬取;第二确定模块70用于若第一结果数据产生第二爬取请求,则判断出爬虫程序的工作状态为正在爬取。
采用本发明,通过判断爬虫程序的链接分析模块发出的第一爬取请求与接收到的第一结果数据的关系来判断是否当前爬虫程序是否结束。具体地,若链接分析模块接收到第一结果数据,则第一判断模块分析该第一结果数据是否为第一爬取请求所产生,若该第一结果数据是第一爬取请求所产生,则第二判断模块判断第一结果数据是否产生第二爬取请求,若第一结果数据产生第二爬取请求,则判断出链接分析模块接收到第一结果数据之后,产生了新的爬取请求,爬虫程序仍处于运行状态;若第一结果数据不产生第二爬取请求则判断出链接分析模块接收到第一结果数据之后,未产生新的爬取请求,爬虫程序的工作状态为结束。采用本发明,解决了现有技术中判断爬虫程序是否结束的准确性差的问题,实现了准确判断爬虫程序的工作状态。
通过本发明的上述实施例,无需同时分别判断页面爬取模块和链接分析模块中正在爬取的数量和待爬取任务的数量之间的关系,简化了判断条件,实现了对判断爬虫程序的结束与否的简单判断。
在本发明的上述实施例中,第二判断模块可以包括:启动模块,用于若链接分析模块接收到的第一结果数据为第一爬取请求所产生的数据,则开启计时器计时;第二判断子模块,用于在预设时间段内判断链接分析模块是否输出第二爬取请求;第三确定模块,用于若链接分析模块输出第二爬取请求,则判断出第一结果数据产生第二爬取请求,停止并重置计时器;第四确定模块,用于若链接分析模块未输出第二爬取请求,则判断出第一结果数据未产生第二爬取请求。
通过本发明的上述实施例,不用同时分别判断页面爬取模块和链接分析模块中正在进行的爬取请求的数量和待爬取请求的数量之间的关系,简化了判断条件,实现了对判断爬虫程序的结束与否的简单判断。
根据本发明的上述实施例,判断装置还可以包括:第一设置模块,用于在判断爬虫程序的链接分析模块接收到的第一结果数据是否为第一爬取请求所产生的数据之前,设置链接分析模块输出的各个第三爬取请求的第一标签;第二设置模块,用于设置执行第三爬取请求得到第一结果数据的第二标签;建立第一标签与第二标签的映射关系,其中,第三爬取请求包括第一爬取请求;第一判断模块包括:第一判断子模块,用于通过第一标签和第二标签的映射关系判断第一结果数据是否为第一爬取请求所产生的数据。
其中,上述实施例中的第一标签与第二标签的映射关系可以为相等关系,即,第一标签的值等于第二标签的值,即爬取结果与对应的爬取请求使用同样的标签。
本发明所提供的方法仅需对第三爬取请求和第一结果数据设置唯一标签(即第一标签和第二标签),并通过标签判断第一爬取请求和第一结果数据之间的关系判断是否结束爬虫程序,简化了爬虫程序的结束的判定条件,达到了对爬虫程序是否结束进行判定时实现条件简单、无竞争风险的效果。
需要进一步说明的是,第一设置模块(该模块的功能与上述的标签设置模块功能类似)可不断更新第一标签:每一个第三爬取请求输出时,标签设置模块都会赋给它一个新的标签,并将这个新的标签记为第一标签。
通过本发明的上述实施例,无需追踪爬虫程序中待爬取请求数量和正在运行的爬取请求数量这两个变量,从而规避了线程安全相关的复杂性和竞争风险。本发明的上述实施例仅需对第三爬取请求和第一结果数据设置唯一标签(即第一标签和第二标签),并通过标签判定最后离开链接分析模块的标签回到链接分析模块后,是否有新的爬取请求生成,若无新请求生成,开启计时器计时,当一段时间之后,仍无新请求生成,则判定爬取结束,从而准确判断爬虫程序的结束状态。
在上述实施例中,该判断装置还可以包括:保存模块,用于在设置链接分析模块输出的各个第三爬取请求的第一标签的同时,保存第一标签,停止并重置计时器的计时。
需要进一步说明的是,在上述实施例中保存模块还可以包括一个数据模块,用于保存所有的第三爬取请求和对应的第一标签,在判断是否结束爬虫程序时,需要从该数据模块中读取数据,通过使用这个数据模块能够提高查询效率,达到了简化对爬虫程序结束条件的简化的效果,使得爬虫程序的结束更容易判断。
在本发明的上述实施例中,其特征在于,该判断装置还可以包括:关闭模块,用于在判断出爬虫程序的工作状态为结束爬取之后,关闭爬虫程序的链接分析模块和页面爬取模块。
通过本发明上述实施例,仅需对模块边界的输出打上唯一标签,并通过追踪“当前最后一个爬取请求”并利用链接分析的性能可预判性,巧妙地得到结束条件的触发,具有逻辑简单、无竞争风险且判断结果准确地优点。
本实施例中所提供的各个模块与方法实施例对应步骤所提供的使用方法相同、应用场景也可以相同。当然,需要注意的是,上述模块涉及的方案可以不限于上述实施例中的内容和场景,且上述模块可以运行在计算机终端或移动终端,可以通过软件或硬件实现。
从以上的描述中,可以看出,本发明实现了如下技术效果:
采用本发明,通过判断爬虫程序的链接分析模块发出的第一爬取请求与接收到的第一结果数据的关系来判断是否当前爬虫程序是否结束。具体地,若链接分析模块接收到第一结果数据,则分析该第一结果数据是否为第一爬取请求所产生,若该第一结果数据是第一爬取请求所产生,则判断第一结果数据是否产生第二爬取请求,若第一结果数据产生第二爬取请求,则判断出链接分析模块接收到第一结果数据之后,产生了新的爬取请求,爬虫程序仍处于运行状态;若第一结果数据不产生第二爬取请求则判断出链接分析模块接收到第一结果数据之后,未产生新的爬取请求,爬虫程序的工作状态为结束。采用本发明,解决了现有技术中判断爬虫程序是否结束的准确性差的问题,实现了准确判断爬虫程序的工作状态。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、移动终端、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。