📜  Scrapy-发送电子邮件(1)

📅  最后修改于: 2023-12-03 15:05:06.033000             🧑  作者: Mango

Scrapy - 发送电子邮件

介绍

在爬虫程序处理数据的过程中,我们经常需要将处理结果发送给其他人或者自己。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 处理结果发送到指定的邮箱。这种方式非常适合那些需要即时获取爬虫程序处理结果的情况。