¿Cómo obtener el número de solicitudes en cola en scrapy?

Estoy usando scrapy para rastrear algunos sitios web. ¿Cómo obtener el número de solicitudes en la cola?

He mirado el código fuente de scrapy y encuentro scrapy.core.scheduler.Scheduler puede conducir a mi respuesta. Consulte: https://github.com/scrapy/scrapy/blob/0.24/scrapy/core/scheduler.py

Dos preguntas:

  1. ¿Cómo acceder al progtwigdor en mi clase de araña?
  2. ¿Qué significan self.dqs y self.mqs en la clase del planificador?

Esto me tomó un tiempo para averiguar, pero esto es lo que usé:

self.crawler.engine.slot.scheduler

Esa es la instancia del planificador. Luego puede llamar al __len__() o, si solo necesita verdadero / falso para las solicitudes pendientes, haga algo como esto:

 self.crawler.engine.scheduler_cls.has_pending_requests(self.crawler.engine.slot.scheduler) 

Tenga en cuenta que aún podría haber solicitudes en ejecución, incluso si la cola está vacía. Para verificar cuántas solicitudes se están ejecutando actualmente use:

 len(self.crawler.engine.slot.inprogress) 

Un enfoque para responder a sus preguntas:

De la documentación http://readthedocs.org/docs/scrapy/en/0.14/faq.html#does-scrapy-crawl-in-breath-first-or-depth-first-order

De forma 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 verdadero orden de BFO, puede hacerlo configurando las siguientes configuraciones:

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

Por self.dqs tanto, self.dqs y self.mqs son autoesplicativos (progtwigdor de colas de disco y progtwigdor de colas de memoria).

De otra respuesta de SO, hay una sugerencia sobre el acceso a la presentación de colas en la base de datos en el que se guardan las colas en la base de datos . https://github.com/scrapy/queuelib

Una vez que lo obtenga, solo necesita contar la longitud de la cola.