使用scrapy自帶的郵件模塊
在setting 配置
SMTP_SERVER = 'smtp.qq.com'
SMTP_PORT = 465
SMTP_OVER_SSL = True
SMTP_CONNECTION_TIMEOUT = 10
EMAIL_PASSWORD = 'XXX' # 填寫生成的授權(quán)碼
EMAIL_SENDER = 'XXX@qq.com'
EMAIL_RECIPIENTS = [EMAIL_SENDER]
EMAIL_SUBJECT = 'Email from #scrapydweb'
在代碼中引mail入庫
MailSender是scrapy自帶的一個發(fā)送郵件的庫
from scrapy.mail import MailSender
監(jiān)聽任務(wù)和發(fā)郵件
from scrapy import signals
from scrapy.mail import MailSender
from scrapy.exceptions import NotConfigured
from twisted.internet import task
class StatsMailer():
def __init__(self, stats, recipients, mail, interval=3600.0):
# interval 設(shè)置半個小時執(zhí)行下任務(wù)
self.stats = stats
self.node_id = get_node_id()
self.interval = interval
self.task = None
self.stats = stats
self.recipients = recipients
@classmethod
def from_crawler(cls, crawler):
recipients = crawler.settings.getlist("STATSMAILER_RCPTS")
if not recipients:
raise NotConfigured
mail = MailSender.from_settings(crawler.settings)
o = cls(crawler.stats, recipients, mail)
crawler.signals.connect(o.spider_opened, signal=signals.spider_opened)
crawler.signals.connect(o.spider_closed, signal=signals.spider_closed)
return o
def spider_opened(self, spider):
self.task = task.LoopingCall(self.send_email, spider)
self.task.start(self.interval)
def send_email(self, spider):
body = '' # 發(fā)送郵件的正文
if body:
return self.mail.send(self.recipients, "Scrapy stats for: %s" % spider.name, body)
def spider_closed(self, spider, reason):
if self.task and self.task.running:
self.task.stop()
在擴(kuò)展中引用
EXTENSIONS = {
'路徑.StatsMailer': 900
}