Я бы хотел написать бота для Telegram, который может предоставлять статистику Scrapy по запросу . Моя попытка в основном работает, единственная проблема заключается в том, что принудительное закрытие паука (очевидно) не останавливает бота.
Итак, у меня есть два вопроса:
- - это мой общий подход. правильный?
- можно ли закрыть бота даже при принудительном отключении паука?
Вот соответствующий класс:
class TelegramBot(object):
telegram_token = telegram_credentials.token
@classmethod
def from_crawler(cls, crawler):
return cls(crawler)
def __init__(self, crawler):
self.crawler = crawler
cs = crawler.signals
cs.connect(self._spider_closed, signal=signals.spider_closed)
"""Start the bot."""
# Create the Updater and pass it your bot's token.
# Make sure to set use_context=True to use the new context based callbacks
# Post version 12 this will no longer be necessary
self.updater = Updater(self.telegram_token, use_context=True)
# Get the dispatcher to register handlers
dp = self.updater.dispatcher
# on different commands - answer in Telegram
dp.add_handler(CommandHandler("stats", self.stats))
# Start the Bot
self.updater.start_polling()
def _spider_closed(self, spider, reason):
# Stop the Bot
self.updater.stop()
def stats(self, update, context):
# Send a message with the stats
msg = (
"Spider "
+ self.crawler.spider.name
+ " stats: "
+ str(self.crawler.stats.get_stats())
)
update.message.reply_text(msg)
Вот вам могу найти мой полный код в учебнике Scrapy, цитирует паук https://github.com/jtommi/scrapy_telegram-bot_example/blob/master/tutorial/tutorial/telegram-bot.py
Мой код представляет собой комбинацию