Я создал паука и связал метод с событием spider_idle.
Как добавить запрос вручную? Я не могу просто вернуть элемент из синтаксического анализа — синтаксический анализ в этом случае не выполняется, так как все известные URL-адреса были проанализированы. У меня есть метод для создания новых запросов, и я хотел бы запустить его из обратного вызова Spider_idle, чтобы добавить созданные запросы.
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.")
ОБНОВЛЕНИЕ: я решил, что мне, вероятно, нужен объект ExecutionEngine, но я точно не знаю, как получить его от паука, хотя он доступен из экземпляра Crawler.
ОБНОВЛЕНИЕ 2: .. спасибо. ..crawler присоединен как свойство суперкласса, поэтому я могу просто использовать self.crawler без дополнительных усилий. >.>