📅  最后修改于: 2023-12-03 15:05:06.033000             🧑  作者: Mango
在爬虫程序处理数据的过程中,我们经常需要将处理结果发送给其他人或者自己。Scrapy 框架提供了发送电子邮件的功能,方便我们快速将处理结果发送到指定的邮箱。
在使用 Scrapy 发送电子邮件之前,我们首先需要配置邮箱的基本信息,包括邮箱地址、授权码、接收邮件的人的邮箱地址等等。
例如,我们使用 QQ 邮箱作为例子,需要在 QQ 邮箱的“帐户”中创建授权码,然后在 Scrapy 的配置文件中添加如下配置:
MAIL_FROM = 'xxx@qq.com'
MAIL_HOST = 'smtp.qq.com'
MAIL_PORT = 465
MAIL_USER = 'xxx@qq.com'
MAIL_PASS = 'xxx'
MAIL_SSL = True
MAIL_TLS = False
MAIL_TO = ['yyy@qq.com', 'zzz@qq.com']
注:MAIL_FROM 表示发送邮件的邮箱,MAIL_USER 表示登录邮箱的用户名,MAIL_PASS 表示授权码,MAIL_TO 表示接收邮件的邮箱。
创建一个管道(pipeline)来发送邮件,该管道需要在处理完毕的数据中添加发送邮件的信息。
from scrapy.mail import MailSender
class SendEmailPipeline(object):
def __init__(self):
self.mailer = MailSender.from_settings(settings)
def process_item(self, item, spider):
send = False # 根据最终处理结果决定是否发送邮件
if send:
message = "<html><body><h2>{}</h2><p>{}</p></body></html>".format(item['title'], item['content'])
self.mailer.send(to=settings['MAIL_TO'], subject='Scrapy 发送邮件', body=message, mimetype='text/html')
return item
注:MAIL_TO 为 Scrapy 配置文件中定义的接收邮件的人的邮箱地址,message 为邮件内容,可以是 html 格式或纯文本格式。
在配置文件中启用我们刚刚创建的管道:
ITEM_PIPELINES = {
'myproject.pipelines.SendEmailPipeline': 300,
}
通过上述步骤,我们可以方便地将 Scrapy 处理结果发送到指定的邮箱。这种方式非常适合那些需要即时获取爬虫程序处理结果的情况。