待爬队列

待爬队列

待爬队列是一个等待处理的链接队列,爬虫从队列头取出一个链接开始处理,处理过程中发现的链接会加入到队列尾部,一次类推,直到把队列中的链接处理完,爬虫就爬取完成了。

神箭手的待爬队列

为了保证每个爬虫任务的独立性,神箭手上的每个爬虫都有各自的待爬队列,各个爬虫之间不会互相影响。

一个爬虫的待爬队列,神箭手把它分成了有不同优先级的四个队列,分别是scanUrl队列、contentUrl队列、普通队列和失败队列。

scanUrl队列

此队列中存放入口页类型的链接,configs.scanUrls定义的链接会存放在此队列中,回调中可以通过site.addScanUrl添加链接到此队列中。

contentUrl队列

此队列中存放内容页类型的链接,自动链接发现以及site.addUrl的时候,通过正则检测来判断链接类型,如果是内容页,则链接会被加入到此队列中。

普通队列

此队列一般存放的都是帮助页类型的链接,自动链接发现以及site.addUrl的时候,通过正则检测,如果不是内容页,链接就会被加入到此队列中。

失败队列

这是一种特殊的队列,用来存放处理失败的链接。

神箭手的链接调度

链接调度器一次调度一个链接。默认情况下,每次调度,都会按下面的优先级进行:

contentUrl队列 > 普通队列 > scanUrl队列

configs.entriesFirsttrue时,调度优先级变为:

scanUrl队列 > contentUrl队列 > 普通队列

在链接处理过程中,如果碰到处理失败的链接,首先会触发链接的重试(此链接被重新加回到队列),当重试次数(不同类型的链接有不同的重试次数,入口页为5次,帮助页为3次,内容页为2次)达到但仍然失败时,此链接被放入失败队列,当其他所有队列都为空之后,失败队列里的链接还有再重试一次的机会,这些链接重试完之后,爬虫结束。