2012-07-10 63 views
5

pipeline.py代碼發送電子郵件刮後scrapy

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方法編寫代碼,任何人都可以分享一些示例代碼來了解如何執行此操作。

回答

11

你有沒有看着文檔:

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

從文檔

from scrapy.mail import MailSender 

mailer = MailSender() 
mailer.send(to=["[email protected]"], subject="Some subject", body="Some body", cc=["[email protected]"]) 

基本用法你也可以在你自己實現一些自定義的。例如,如果你想使用Gmail:

def send_mail(self, message, title): 
    print "Sending mail..........." 
    import smtplib 
    from email.MIMEMultipart import MIMEMultipart 
    from email.MIMEText import MIMEText 
    gmailUser = '[email protected]' 
    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") 
+0

感謝您的回覆這就是真正有用的 – 2012-07-10 10:25:20

+0

您好,可能有人請告訴我在哪裏把這些代碼? pipeline.py或主要的sider文件。我沒有ide。謝謝 – user2492364 2014-08-27 02:25:03

+0

@ user2492364有沒有具體的答案,這取決於你的業務邏輯。例如,如果你想發送報告,你可以在流水線上做到這一點,但我更喜歡捕捉蜘蛛關閉信號,然後發送郵件 – 2015-03-19 13:30:40

1

我的自我推銷道歉,但我最近創建yagmail:即努力以方便包發送Gmail郵件(文本,HTML,圖像等)。

這是你需要連接代碼:

import yagmail 
yag = yagmail.SMTP('[email protected]', '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')