在scrapy刮擦后发送电子邮件

时间:2012-07-10 10:09:35

标签: python email scrapy

pipeline.py代码

class Examplepipeline(object):

    def __init__(self):
        dispatcher.connect(self.spider_opened, signal=signals.spider_opened)
        dispatcher.connect(self.spider_closed, signal=signals.spider_closed)

    def spider_opened(self, spider):
        log.msg("opened spider  %s at time %s" % (spider.name,datetime.now().strftime('%H-%M-%S')))

    def process_item(self, item, spider):
            log.msg("Processsing item " + item['title'], level=log.DEBUG)


    def spider_closed(self, spider):
        log.msg("closed spider %s at %s" % (spider.name,datetime.now().strftime('%H-%M-%S')))

在上面的蜘蛛代码中,它将显示蜘蛛的开始时间和结束时间,但是现在蜘蛛完成后,我想从scrapy收到“Scraping已经完成”的邮件。是否有可能做到这一点。如果可能,我们可以在spider_closed方法中编写该代码,任何人都可以分享一些关于如何执行此操作的示例代码。

2 个答案:

答案 0 :(得分:11)

您是否查看过文档:

http://doc.scrapy.org/en/latest/topics/email.html

文档中的基本用法

from scrapy.mail import MailSender

mailer = MailSender()
mailer.send(to=["someone@example.com"], subject="Some subject", body="Some body", cc=["another@example.com"])

您也可以自己实施自定义内容。例如,如果你想使用gmail:

def send_mail(self, message, title):
    print "Sending mail..........."
    import smtplib
    from email.MIMEMultipart import MIMEMultipart
    from email.MIMEText import MIMEText
    gmailUser = 'mail_you_send_from@gmail.com'
    gmailPassword = 'password'
    recipient = 'mail_to_send_to'

    msg = MIMEMultipart()
    msg['From'] = gmailUser
    msg['To'] = recipient
    msg['Subject'] = title
    msg.attach(MIMEText(message))

    mailServer = smtplib.SMTP('smtp.gmail.com', 587)
    mailServer.ehlo()
    mailServer.starttls()
    mailServer.ehlo()
    mailServer.login(gmailUser, gmailPassword)
    mailServer.sendmail(gmailUser, recipient, msg.as_string())
    mailServer.close()
    print "Mail sent"

并称之为:

send_mail("some message", "Scraper Report")

答案 1 :(得分:1)

我对自我推销表示歉意,但我最近创建了yagmail:一个旨在简化发送Gmail邮件(文本,HTML,图像等)的软件包。

这是您需要连接的代码:

import yagmail
yag = yagmail.SMTP('mail_you_send_from@gmail.com', 'password')

然后你用它来发送电子邮件:

yag.send('mail_to_send_to', 'Scraper Report', 'some message')

有什么好处是你不必像文本一样保持设置,但你可以依靠操作系统的密钥环来获得真正安全和舒适的感觉。

它甚至可以是一个班轮(自动关闭):

SMTP('mail_you_send_from').send('mail_to_send_to', 'Scraper Report', 'some message')