待爬队列
待爬队列是一个等待处理的链接队列,爬虫从队列头取出一个链接开始处理,处理过程中发现的链接会加入到队列尾部,一次类推,直到把队列中的链接处理完,爬虫就爬取完成了。
网多云的待爬队列
为了保证每个爬虫任务的独立性,网多云上的每个爬虫都有各自的待爬队列,各个爬虫之间不会互相影响。
一个爬虫的待爬队列,网多云把它分成了有不同优先级的四个队列,分别是scanUrl队列、contentUrl队列、普通队列和失败队列。
scanUrl队列
此队列中存放入口页类型的链接,configs.scanUrls
定义的链接会存放在此队列中,回调中可以通过site.addScanUrl
添加链接到此队列中。
contentUrl队列
此队列中存放内容页类型的链接,自动链接发现以及site.addUrl
的时候,通过正则检测来判断链接类型,如果是内容页,则链接会被加入到此队列中。
普通队列
此队列一般存放的都是帮助页类型的链接,自动链接发现以及site.addUrl
的时候,通过正则检测,如果不是内容页,链接就会被加入到此队列中。
失败队列
这是一种特殊的队列,用来存放处理失败的链接。
网多云的链接调度
链接调度器一次调度一个链接。默认情况下,每次调度,都会按下面的优先级进行:
contentUrl队列 > 普通队列 > scanUrl队列
当configs.entriesFirst
为true
时,调度优先级变为:
scanUrl队列 > contentUrl队列 > 普通队列
在链接处理过程中,如果碰到处理失败的链接,首先会触发链接的重试(此链接被重新加回到队列),当重试次数(不同类型的链接有不同的重试次数,入口页为5次,帮助页为3次,内容页为2次)达到但仍然失败时,此链接被放入失败队列,当其他所有队列都为空之后,失败队列里的链接还有再重试一次的机会,这些链接重试完之后,爬虫结束。