我希望在蜘蛛关闭时将日志发送到电子邮件 我知道如何发送电子邮件,我有一个电子邮件扩展名 我知道如何将日志保存到文件中
但我不知道如何直接将日志写入电子邮件body
?
请帮帮我
这是我的蜘蛛
#! -*- encoding: utf-8 -*-
from scrapy.spiders import Spider
import logging
from datetime import datetime
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler('../logs/test.log')
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
class MySpider(Spider):
name = "abctest"
start_urls = ["https://www.google.com.tw"]
def __init__(self,**kwargs):
super(MySpider, self).__init__()
def parse(self, response):
logger.info("info1")
logger.info("info2")
logger.info("info3")
logger.error("error2")
logger.error("error3")
它会写入test.log
:
2015-10-01 14:35:02,075 - test.spiders.e_test - INFO - info1
2015-10-01 14:35:02,075 - test.spiders.e_test - INFO - info2
2015-10-01 14:35:02,076 - test.spiders.e_test - INFO - info3
2015-10-01 14:35:02,076 - test.spiders.e_test - ERROR - error2
2015-10-01 14:35:02,076 - test.spiders.e_test - ERROR - error3
我想使用下面的扩展程序发送电子邮件
但我仍然没有找到如何将日志写入body
# -*- coding: utf-8 -*-
from scrapy import signals
def send_email(user, pwd, recipient, subject, body):
import smtplib
gmail_user = user
gmail_pwd = pwd
FROM = user
TO = recipient if type(recipient) is list else [recipient]
SUBJECT = subject
TEXT = body
# Prepare actual message
message = """\From: %s\nTo: %s\nSubject: %s\n\n%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
try:
server = smtplib.SMTP("smtp.gmail.com", 587)
server.ehlo()
server.starttls()
server.login(gmail_user, gmail_pwd)
server.sendmail(FROM, TO, message)
server.close()
print 'successfully sent the mail'
except:
print "failed to send mail"
class Mail(object):
@classmethod
def from_crawler(cls, crawler):
ext = cls()
crawler.signals.connect(ext.spider_closed, signal=signals.spider_closed)
#crawler.signals.connect(ext.spider_error, signal=signals.spider_error)
return ext
def spider_closed(self, spider, reason):
send_email("test@gmail.com","pass","test@gmail.com",
subject='No item scraped on %s' % spider.name,
body='No item scraped on %s' % spider.start_urls)