Scrapy no parece estar haciendo DFO

Tengo un sitio web para el que mi rastreador debe seguir una secuencia. Así, por ejemplo, debe ir a1, b1, c1 antes de que comience a2, cada uno de a, b y c son manejados por diferentes funciones de análisis y las urls correspondientes se crean en un objeto de Solicitud y se obtienen. Lo siguiente ilustra aproximadamente el código que estoy usando:

class aspider(BaseSpider): def parse(self,response): yield Request(b, callback=self.parse_b, priority=10) def parse_b(self,response): yield Request(c, callback=self.parse_c, priority=20) def parse_c(self,response) final_function() 

Sin embargo, me parece que la secuencia de rastreos parece ser a1, a2, a3, b1, b2, b3, c1, c2, c3, lo cual es extraño ya que pensé que Scrapy debería garantizar primero la profundidad.

La secuencia no tiene que ser estricta, pero el sitio que estoy rastreando tiene un límite establecido, por lo que Scrapy debe comenzar a rastrear el nivel c lo antes posible antes de que se rastree el nivel 5 del nivel bs. ¿Cómo se puede lograr esto?

La primera búsqueda en profundidad es exactamente lo que estás describiendo:

 search as deep into a's as possible before moving to b's 

Para cambiar Scrapy para que realice una búsqueda de amplitud (a1, b1, c1, a2, etc …), cambie estos ajustes:

 DEPTH_PRIORITY = 1 SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleFifoDiskQueue' SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.FifoMemoryQueue' 

* Encontrado en el doc.scrapy.org FAQ

Creo que estás notando la diferencia entre los primeros algoritmos de búsqueda de profundidad y de amplitud (consulta Wikipedia para obtener información sobre ambos).

Scrapy tiene la capacidad de cambiar el algoritmo que se usa:

“De manera predeterminada, Scrapy usa una cola LIFO para almacenar solicitudes pendientes, lo que básicamente significa que se rastrea en el orden DFO. Este orden es más conveniente en la mayoría de los casos. Si desea rastrear en el orden BFO verdadero, puede hacerlo configurando los siguientes ajustes: ”

Consulte http://doc.scrapy.org/en/0.14/faq.html para obtener más información.

Scrapy utiliza DFO por defecto. El motivo de la secuencia de los rastreos es que los rastros rastrean de forma asíncrona. A pesar de que utiliza DFO, la secuencia parece irrazonable debido al retraso de la red o algo más.