一种资源下载系统、方法及爬虫下载系统与流程

文档序号:11677709阅读:167来源:国知局
一种资源下载系统、方法及爬虫下载系统与流程

本申请涉及计算机应用技术领域,更具体地说,涉及一种资源下载系统、方法及爬虫下载系统。



背景技术:

爬虫,即网络爬虫,是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化。

现有技术中的爬虫主要分为传统爬虫和聚焦爬虫,但不管是传统爬虫,还是聚焦爬虫,它们向目标网站的抓取频率都是固定的,这会使得一些反爬虫程序通过固定抓取频率这一特征轻易的识别出爬虫,从而拒绝爬虫的访问或进行一些机器人验证的工作,导致爬虫的功能失效。



技术实现要素:

为解决上述技术问题,本发明提供了一种资源下载系统、方法及爬虫下载系统,以实现以随机的抓取频率抓取资源,从而降低被反爬虫程序识别的概率的目的。

为实现上述技术目的,本发明实施例提供了如下技术方案:

一种资源下载系统,用于为爬虫提供令牌,所述资源下载系统包括:数据库和随机令牌生成器,其中,

所述随机令牌生成器用于接收到生成请求后生成令牌并存储于所述数据库中,所述随机令牌生成器生成的令牌的时间戳增加值的取值范围根据所述爬虫对站点的每秒查询率确定,所述令牌的时间戳根据当前时刻的时间戳和所述时间戳增加值确定;

所述数据库用于存储预设数量的令牌,并在存储的令牌被所述爬虫消费后向所述随机令牌生成器发送生成请求;

所述爬虫用于在接收到下载指令时,向所述数据库请求所述令牌。

可选的,所述随机令牌生成器接收到生成请求后生成令牌时,具体用于,将所述爬虫对站点的每秒查询率代入预设公式中计算获得最大随机数;

根据所述最大随机数随机确定待生成令牌的时间戳增加值;

根据当前时刻的时间戳和所述待生成令牌的时间戳增加值确定待生成令牌的时间戳;

根据所述待生成令牌的时间戳生成令牌;

所述预设公式为其中n表示最大随机数,qps表示所述爬虫对站点的每秒查询率。

可选的,当所述数据库为redis时,所述数据库和随机令牌生成器的功能基于redislua脚本,以使所述数据库和随机令牌生成器的每个操作都是原子操作。

可选的,所述数据库以有序集存储所述令牌。

一种爬虫下载系统,包括如上述任一项所述的资源下载系统。

一种资源下载方法,应用于数据库,所述资源下载方法包括:

判断是否有爬虫请求令牌,如果是,则判断存储的令牌中是否有满足预设条件的令牌,若是,则向所述爬虫发送一个满足预设条件的令牌,并向随机令牌生成器发送生成请求,若否,则返回判断是否有爬虫请求令牌的步骤;

所述预设条件包括:令牌的时间戳小于当前时刻的时间戳并且满足爬虫请求的令牌种类。

可选的,当所述数据库为redis时,所述数据库的功能基于redislua脚本,以使所述数据库的每个操作都是原子操作。

一种资源下载方法,应用于随机令牌生成器,所述资源下载方法包括:

在接收到生成请求后生成令牌并存储于所述数据库中,生成的所述令牌的时间戳根据当前时刻的时间戳和爬虫对站点的每秒查询率随机确定。

可选的,所述在接收到生成请求后生成令牌包括:

将所述爬虫对站点的每秒查询率代入预设公式中计算获得最大随机数;

根据所述最大随机数随机确定待生成令牌的时间戳增加值;

根据当前时刻的时间戳和所述待生成令牌的时间戳增加值确定待生成令牌的时间戳;

根据所述待生成令牌的时间戳生成令牌;

所述预设公式为其中n表示最大随机数,qps表示所述爬虫对站点的每秒查询率。

可选的,当所述数据库为redis时,所述随机令牌生成器的功能基于redislua脚本,以使所述随机令牌生成器的每个操作都是原子操作。

从上述技术方案可以看出,本发明实施例提供了一种资源下载系统、方法及爬虫下载系统,其中,资源下载系统通过令牌桶限流方法限定爬虫对站点的抓取频率,而随机令牌生成器生成的令牌的时间戳根据当前时刻的时间戳和爬虫对站点的每秒查询率随机确定,从而将爬虫对站点的抓取频率限定为随机频率,避免了反爬虫程序根据固定抓取频率这一特征对爬虫的识别,进而降低了爬虫被反爬虫程序识别的概率,增加了爬虫的功能稳定性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请的一个实施例提供的一种资源下载系统的结构示意图;

图2为本申请的一个实施例提供的一种资源下载方法的流程示意图;

图3为本申请的另一个实施例提供的一种资源下载方法的流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本申请实施例提供了一种资源下载系统,如图1所示,用于为爬虫100提供令牌,资源下载系统包括:数据库200和随机令牌生成器300,其中,

随机令牌生成器300用于接收到生成请求后生成令牌并存储于数据库200中,随机令牌生成器300生成的令牌的时间戳增加值的取值范围根据爬虫对站点的每秒查询率确定,令牌的时间戳根据当前时刻的时间戳和时间戳增加值确定;

数据库200用于存储预设数量的令牌,并在存储的令牌被爬虫100消费后向随机令牌生成器300发送生成请求;

爬虫100用于在接收到下载指令时,向数据库200请求令牌。

需要说明的是,在本实施例中,资源下载系统以令牌桶限流方法限定爬虫100对站点的抓取频率,具体地,例如,在当一个统一资源定位符(uniformresourcelocator,url)需要下载时,爬虫100会向数据库200请求一个相应站点的令牌,数据库200在接收到爬虫100的令牌请求后,查询存储的符合爬虫100请求的令牌类型中是否有时间戳小于当前时刻的时间戳的令牌,如果是,则向爬虫100提供一个所请求令牌(这是因为只有令牌的时间戳小于当前时刻的时间戳的令牌才是可用的),爬虫100在获取到令牌后才被许可向站点进行url的下载,从而实现控制爬虫100的抓取频率的目的。数据库200中存储的令牌有上限(即预设数量),本申请对预设数量的具体取值并不做限定,具体视实际情况而定。

而在本实施例中,随机令牌生成器300生成的令牌的时间戳增加值的取值范围根据爬虫对站点的每秒查询率确定,令牌的时间戳根据当前时刻的时间戳和时间戳增加值确定,从而将令牌的时间戳增加值限定为随机取值,进而将爬虫100对站点的抓取频率限定为随机频率,避免了反爬虫100程序根据固定抓取频率这一特征对爬虫100的识别,进而降低了爬虫100被反爬虫100程序识别的概率,增加了爬虫100的功能稳定性。

还需要说明的是,时间戳用以唯一地标识某一时刻的时间。

在上述实施例的基础上,在本申请的一个实施例中,随机令牌生成器300接收到生成请求后生成令牌时,具体用于,将爬虫100对站点的每秒查询率代入预设公式中计算获得最大随机数;

根据最大随机数随机确定待生成令牌的时间戳增加值;

根据当前时刻的时间戳和待生成令牌的时间戳增加值确定待生成令牌的时间戳;

根据待生成令牌的时间戳生成令牌;

预设公式为其中n表示最大随机数,qps表示爬虫100对站点的每秒查询率。

需要说明的是,预设公式用于确定最大随机数,由于确定的时间戳增加值需要保证爬虫100对站点的每秒查询率不变,并且由于时间戳增加值是根据最大随机数随机确定的(即例如,当n=5时,时间戳增加值的取值可以是0、1、2、3、4和5,并且时间戳增加值取0、1、2、3、4或5的概率是一样的),根据这个约定有以下等式:

由该等式解得

以qps为1为例,最大随机数n的取值范围为[0,1,2],那么在确定待生成令牌的时间戳增加值时,随机从[0,1,2]中选取;例如当前时刻的时间戳为1481463511,那么在本实施例中,随机令牌生成器300生成的令牌的时间戳为1481463511+[0,1,2]×1000。

在上述实施例的基础上,在本申请的另一个实施例中,当数据库200为redis时,数据库200和随机令牌生成器300的功能基于redislua脚本,以使数据库200和随机令牌生成器300的每个操作都是原子操作。

需要说明的是,当数据库200为redis时,存储于数据库200中的令牌的数据格式需要在存储时进行设定,具体地,由于redis是多数据结构的内存数据库200,优选使用有序集(sortedset)对令牌进行存储,其数据格式为:key为site_tokens,其中,site指站点名,例如对于www.abcde.com而言,其站点名为abcde;value为有序集结构,value为proxyid,proxyid是注册代理服务器(proxy)时分配的id,score是时间戳(timestamp)。

还需要说明的是,数据库200和随机令牌生成器300的操作是指其实现各自功能所需执行的步骤。保证数据库200和随机令牌生成器300的每个操作都是原子操作的目的是防止多线程操作造成的生成下一个令牌的时间戳混乱的情况出现。

相应的,本申请实施例还提供了一种资源下载方法,如图2所示,应用于数据库,资源下载方法包括:

s101:判断是否有爬虫请求令牌,如果是,则判断存储的令牌中是否有满足预设条件的令牌,若是,则向爬虫发送一个满足预设条件的令牌,并向随机令牌生成器发送生成请求,若否,则返回判断是否有爬虫请求令牌的步骤;

预设条件包括:令牌的时间戳小于当前时刻的时间戳并且满足爬虫请求的令牌种类。

需要说明的是,时间戳用以唯一地标识某一时刻的时间。

资源下载方法以令牌桶限流方法限定爬虫对站点的抓取频率,具体地,例如,在当一个统一资源定位符(uniformresourcelocator,url)需要下载时,爬虫会向数据库请求一个相应站点的令牌,数据库在接收到爬虫的令牌请求后,查询存储的符合爬虫请求的令牌类型中是否有时间戳小于当前时刻的时间戳的令牌,如果是,则向爬虫提供一个所请求令牌(这是因为只有令牌的时间戳小于当前时刻的时间戳的令牌才是可用的),爬虫在获取到令牌后才被许可向站点进行url的下载,从而实现控制爬虫的抓取频率的目的。数据库中存储的令牌有上限(即预设数量),本申请对预设数量的具体取值并不做限定,具体视实际情况而定。

而在本实施例中,随机令牌生成器生成的令牌的时间戳根据当前时刻的时间戳和爬虫对站点的每秒查询率随机确定,从而将爬虫对站点的抓取频率限定为随机频率,避免了反爬虫程序根据固定抓取频率这一特征对爬虫的识别,进而降低了爬虫被反爬虫程序识别的概率,增加了爬虫的功能稳定性。

在上述实施例的基础上,在本申请的一个实施例中,当数据库为redis时,数据库的功能基于redislua脚本,以使数据库的每个操作都是原子操作。

需要说明的是,当数据库为redis时,存储于数据库中的令牌的数据格式需要在存储时进行设定,具体地,由于redis是多数据结构的内存数据库,优选使用有序集(sortedset)对令牌进行存储,其数据格式为:key为site_tokens,其中,site指站点名,例如对于www.abcde.com而言,其站点名为abcde;value为有序集结构,value为proxyid,proxyid是注册代理服务器(proxy)时分配的id,score是时间戳(timestamp)。

那么在本实施例中,假设爬虫需要对下载的url为http://www.abcde.com/a.html,则爬虫向数据库请求的令牌种类为site为abcde的令牌。

还需要说明的是,数据库的操作是指其实现各自功能所需执行的步骤。保证数据库的每个操作都是原子操作的目的是防止多线程操作造成的生成下一个令牌的时间戳混乱的情况出现。

相应的,本申请实施例还提供了一种资源下载方法,如图3所示,应用于随机令牌生成器,资源下载方法包括:

s201:在接收到生成请求后生成令牌并存储于数据库中,生成的令牌的时间戳根据当前时刻的时间戳和爬虫对站点的每秒查询率随机确定。

需要说明的是,时间戳用以唯一地标识某一时刻的时间。在本实施例中,随机令牌生成器生成的令牌的时间戳根据当前时刻的时间戳和爬虫对站点的每秒查询率随机确定,从而将爬虫对站点的抓取频率限定为随机频率,避免了反爬虫程序根据固定抓取频率这一特征对爬虫的识别,进而降低了爬虫被反爬虫程序识别的概率,增加了爬虫的功能稳定性。

在上述实施例的基础上,在本申请的另一个实施例中,在接收到生成请求后生成令牌包括:

将爬虫对站点的每秒查询率代入预设公式中计算获得最大随机数;

根据最大随机数随机确定待生成令牌的时间戳增加值;

根据当前时刻的时间戳和待生成令牌的时间戳增加值确定待生成令牌的时间戳;

根据待生成令牌的时间戳生成令牌;

预设公式为其中n表示最大随机数,qps表示爬虫对站点的每秒查询率。

需要说明的是,预设公式用于确定最大随机数,由于确定的时间戳增加值需要保证爬虫对站点的每秒查询率不变,并且由于时间戳增加值是根据最大随机数随机确定的(即例如,当n=5时,时间戳增加值的取值可以是0、1、2、3、4和5,并且时间戳增加值取0、1、2、3、4或5的概率是一样的),根据这个约定有以下等式:

由该等式解得

以qps为1为例,最大随机数n的取值范围为[0,1,2],那么在确定待生成令牌的时间戳增加值时,随机从[0,1,2]选取;例如当前时刻的时间戳为1481463511ms,那么在本实施例中,随机令牌生成器生成的令牌的时间戳为1481463511+[0,1,2]×1000ms。

在上述实施例的基础上,在本申请的又一个实施例中,当数据库为redis时,随机令牌生成器的功能基于redislua脚本,以使随机令牌生成器的每个操作都是原子操作。

需要说明的是,随机令牌生成器的操作是指其实现功能所需执行的步骤。保证随机令牌生成器的每个操作都是原子操作的目的是防止多线程操作造成的生成下一个令牌的时间戳混乱的情况出现。

相应的,本申请实施例还提供了一种爬虫下载系统,包括如上述任一实施例的资源下载系统。

综上所述,本申请实施例提供了一种资源下载系统、方法及爬虫下载系统,其中,资源下载系统通过令牌桶限流方法限定爬虫对站点的抓取频率,而随机令牌生成器生成的令牌的时间戳增加值的取值范围根据所述爬虫对站点的每秒查询率确定,令牌的时间戳根据当前时刻的时间戳和所述时间戳增加值确定,从而将令牌的时间戳增加值限定为随机取值,进而将爬虫对站点的抓取频率限定为随机频率,避免了反爬虫程序根据固定抓取频率这一特征对爬虫的识别,进而降低了爬虫被反爬虫程序识别的概率,增加了爬虫的功能稳定性。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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