Я пытаюсь приостановить работу механизма scrapy (работающего искателя) из промежуточного программного обеспечения.Как использовать self.crawler.engine.pause() от промежуточного программного обеспечения в scrapy
, когда я пытаюсь вызвать self.crawler.engine.unpause() Я получаю эту ошибку:
объекта «cRetry» не имеет атрибута «искателю»
Это мой промежуточное программное обеспечение. Как я могу получить доступ к объекту искателя?
class cRetry(RetryMiddleware):
errorCounter = 0
def process_response(self, request, response, spider):
if response.status in self.retry_http_codes:
reason = response_status_message(response.status)
return self._retry(request, reason, spider) or response
elif "error" in response.body:
self.errorCounter = self.errorCounter + 1
if self.errorCounter >= 10:
self.crawler.engine.pause()
os.system("restart.sh")
print "Reset"
time.sleep(10)
self.crawler.engine.unpause()
self.errorCounter = 0
reason ="Restart Required"
return self._retry(request, reason, spider) or response
### end
return response
Я переопределяю в своем файле spider.py? Я уже переопределяю init. когда я добавляю параметр искателя, например, я получаю сообщение об ошибке: __init __ (self, crawler, filename = None, domain = ". com"), __init __() принимает не менее 2 аргументов без ключевого слова (1 данный) – Jabb
Вы должны переопределить их в cRetry. [Оригинальные] (https://github.com/scrapy/scrapy/blob/master/scrapy/contrib/downloadermiddleware/retry.py) из RetryMiddleware не передают 'искатель' в' __init__', а только 'искатель. settings'. Таким образом, вам нужно изменить 'from_crawler' для передачи' искателя', а затем настроить вызов '__init__' для вызова родительского конструктора (так как вы не хотите потерять другие настройки и т. Д.) – Aufziehvogel
Я пробовал ваше решение, и теперь оно throws: TypeError: unbound метод from_crawler() должен быть вызван с экземпляром cRetry в качестве первого аргумента (вместо этого был получен экземпляр CrawlerProcess). Я полагаю, что мне нужно изменить from_crawler (cls, ** crawler **). Уже пытался from_crawler (cls, ** self **), поэтому он передает экземпляр cRetry. Но успеха нет. – Jabb