Bir örümcek oluşturdum ve spider_idle olayına bir yöntem bağladım.Scrapy: Bir spider_idle olayı geri çağrısından el ile bir istek nasıl eklenir?
El ile bir istek nasıl eklenir? Öğeyi ayrıştırmadan döndüremiyorum - bilinen tüm URL'ler ayrıştırıldığı için bu durumda ayrıştırılamıyor. Yeni istekleri oluşturmak için bir yöntemim var ve oluşturulan istekleri eklemek için spider_idle geri çağrısından çalıştırmak istiyorum.
class FooSpider(BaseSpider):
name = 'foo'
def __init__(self):
dispatcher.connect(self.dont_close_me, signals.spider_idle)
def dont_close_me(self, spider):
if spider != self:
return
# The engine instance will allow me to schedule requests, but
# how do I get the engine object?
engine = unknown_get_engine()
engine.schedule(self.create_request())
# afterward, ensure we stay alive by raising DontCloseSpider
raise DontCloseSpider("..I prefer live spiders.")
GÜNCELLEME: Ben muhtemelen ExecutionEngine
nesneyi ihtiyaç olduğunu tespit ettik, ancak ben tam bir Crawler
örneğinden, bir örümcekten though it mevcut olduğunu nasıl bilmiyorum.
UPDATE 2: ..thanks. ..crawler süper sınıfın bir özelliği olarak eklenmiştir, bu yüzden ben de ek çaba harcamadan self.crawler'ı kullanabilirim. >>
Ugh. Benim süper sınıfımın bir parçası. >.> –
.. Tarayıcıyı sınıfa eklemek için küçük bir uzantı yazmıştım, ancak bu kesinlikle doğru yol. –
Yukarıdaki işlevin ne yaptığını açıklayabilir misiniz? Henüz ne yapamadığını anlamadım. Ayrıca, spider_idle (self) farkını da açıklayabilir misiniz: self.crawler.engine.slot.scheduler.next_request() zam DontCloseSpider –