2012-07-10 27 views
5

pipeline.py đangGửi e-mail sau khi cạo trong 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'))) 

Trong mã nhện trên, nó sẽ hiển thị thời gian bắt đầu và thời gian kết thúc của nhện, nhưng bây giờ sau khi hoàn thành các nhện, tôi muốn nhận được một thư rằng "Cạo đã được hoàn thành" từ phế liệu. Có khả năng làm cái này không. Nếu có thể chúng ta có thể viết mã đó trong phương thức spider_closed, bất cứ ai cũng có thể chia sẻ một số mã ví dụ về cách thực hiện điều này.

Trả lời

11

Các bạn đã nhìn vào tài liệu:

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

sử dụng cơ bản từ tài liệu

from scrapy.mail import MailSender 

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

Ngoài ra, bạn có thể thực hiện một cái gì đó tùy chỉnh trên của riêng bạn. Ví dụ, nếu bạn muốn sử dụng 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" 

và chỉ cần gọi nó thích:

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

Cảm ơn cho thats trả lời thực sự hữu ích –

+0

Xin chào, có thể ai đó xin vui lòng cho tôi biết nơi để đưa vào những mã? pipeline.py hoặc tệp sider chính. Tôi không có id.Thanks – user2492364

+0

@ user2492364 không có câu trả lời cụ thể, nó phụ thuộc vào logic kinh doanh của bạn. Ví dụ, nếu bạn muốn gửi báo cáo, bạn có thể làm điều đó trên đường ống, nhưng tôi muốn bắt tín hiệu đóng của nhện và sau đó gửi thư –

1

lời xin lỗi của tôi cho tự quảng bá, nhưng gần đây tôi đã tạo yagmail: một gói mà phấn đấu để làm cho nó dễ dàng để gửi tin nhắn gmail (văn bản, html, hình ảnh, v.v.).

Đây là mã bạn cần phải kết nối:

import yagmail 
yag = yagmail.SMTP('[email protected]', 'password') 

Sau đó, bạn sử dụng để gửi email:

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

gì là tốt đẹp là bạn không cần phải giữ các thiết lập xung quanh dưới dạng văn bản, nhưng bạn có thể dựa vào khóa của hệ điều hành để có cảm giác an toàn và thoải mái thực sự.

Nó thậm chí có thể là một lót (tức đóng cửa tự động):

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