Хорошо, я пытался играть со Scrapy, стараясь изящно выйти, когда нет подключения к интернету или другая ошибка.Результат?Я не мог заставить его работать должным образом.Вместо этого я закончил тем, что просто отключил весь переводчик и всех его отвратительных детей с отсрочкой, используя os._exit(0)
, например:
import socket
#from scrapy.exceptions import CloseSpider
...
def check_connection(self):
try:
socket.create_connection(("www.google.com", 443))
return True
except:
pass
return False
def start_requests(self):
if not self.check_connection():
print('Connection Lost! Please check your internet connection!', flush=True)
os._exit(0) # Kill Everything
#CloseSpider('Grace Me!') # Close clean but expect deferred errors!
#raise CloseSpider('No Grace') # Raise Exception (w. Traceback)?!
...
Вот и все!
ПРИМЕЧАНИЕ
Я пытался использовать различные внутренние методы для выключения Scrapy и справлялся с неприятной:
[scrapy.core.scraper] ERROR: Error downloading
проблемой.Это только (?) Происходит, когда вы используете: raise CloseSpider('Because of Connection issues!')
среди многих других попыток.Снова следует twisted.internet.error.DNSLookupError
, хотя я и обработал это в моем коде, похоже, он появился из ниоткуда.Очевидно, raise
- это ручной способ всегда выдавать исключение .Так что вместо этого используйте CloseSpider()
без него.
Данная проблема также, кажется, является повторяющейся проблемой в среде Scrapy ... и фактически в исходном коде есть некоторые FIXME там .Даже когда я пытался применить такие вещи, как:
def stop(self):
self.deferred = defer.Deferred()
for name, signal in vars(signals).items():
if not name.startswith('_'):
disconnect_all(signal)
self.deferred.callback(None)
и используя эти ...
#self.stop()
#sys.exit()
#disconnect_all(signal, **kwargs)
#self.crawler.engine.close_spider(spider, 'cancelled')
#scrapy.crawler.CrawlerRunner.stop()
#crawler.signals.stop()
PS.Было бы здорово, если бы разработчики Scrapy могли документировать, как лучше всего справиться с таким простым делом, как отсутствие интернет-соединения?