Scrapy监控爬虫状况,邮件发送功能及爬虫停止信息

一、需求

邮件发送功能,作为一个【通知】或者说【知晓】的方式,在实际应用中会经常使用的。你希望当它们触发某个状况的时候,你的邮箱会收到对应的提醒,这样你可以及时的处理这些状况,当然你也可以集成微信来开发,让通知发送到你的微信。可以根据实际需求,在不同的时机发送不同的提醒邮件,以对爬虫状态进行监控。

二、scrapy文档

发送email

虽然Python通过 smtplib 库使得发送 email 变得很简单,Scrapy仍然提供了自己的实现。 该功能十分易用,同时由于采用了 Twisted非阻塞式(non-blocking)IO ,其避免了对爬虫的非阻塞式IO的影响。 另外,其也提供了简单的API来发送附件。 通过一些 settings 设置,您可以很简单的进行配置。

有两种方法可以创建邮件发送器(mail sender)

1   通过标准构造器(constructor)创建:

fromscrapy.mailimportMailSendermailer = MailSender()

2   传递一个Scrapy设置对象,其会参考 settings:

mailer= MailSender.from_settings(settings)

这是如何来发送邮件(不包括附件):

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

在Scrapy中发送email推荐使用MailSender。其同框架中其他的部分一样,使用了 Twisted非阻塞式(non-blocking)IO 。

classscrapy.mail.MailSender(smtphost=None, mailfrom=None, smtpuser=None, smtppass=None, smtpport=None)

参数由以下组成:

smtphost (str) – 发送email的SMTP主机(host),如果忽略,则使用 MAIL_HOST 。

 mailfrom (str) – 用于发送email的地址(address)(填入 From:) ,如果忽略,则使用 MAIL_FROM 。 

smtpuser – SMTP用户,如果忽略,则使用 MAIL_USER ,如果未给定,则将不会进行SMTP认证(authentication)。 

 smtppass (str) – SMTP认证的密码 

 smtpport (int) – SMTP连接的端口 

 smtptls – 强制使用STARTTLS

smtpssl(boolean)– 强制使用SSL连接

classmethodfrom_settings(settings)

使用Scrapy设置对象来初始化对象。其会参考 这些Scrapy设置:

参数: settings (scrapy.settings.Settings object) – the e-mail recipients

send(to, subject,  body, cc=None,  attachs=(),  mimetype='text/plain')

三、实际写法

1   设置邮箱pop

登录QQ邮箱 找到   1  设置   2   账户

然后生成授权码(以前是生成密码,现在用授权码)

2   具体的爬虫文件中编写:

from  scrapy.mail  import  MailSender

from  scrapy.xlib.pydispatch  import  dispatcher

from  scrapy  import  signals

接着在class类的上方编写emial的链接配置信息:

mailers = MailSender(smtphost="smtp.qq.com",# 发送邮件的服务器    

mailfrom ="abcdefg@qq.com",              # 邮件发送者

smtpuser ="abcdefg@qq.com",             # 用户名

smtppass ="qtpzvxxyyxxyyxxyyxde",    # 邮箱的授权码

smtpport = 25# 端口号)                              #初始化邮件模块

到class类中编写信号量监听和具体的邮件发送代码:

def   __init__(self):   ###监听信号量

        super(YoutubeapiSpider, self).__init__()      # 当收到spider_closed信号的时候,调用下面的close方法来发送通知邮件    

        dispatcher.connect(self.close, signals.spider_closed)

def   close(spider, reason):    ###  执行邮件发送操作

        body  =  "爬虫[%s]已经关闭,原因是: %s"% (spider.name, reason)          

        subject  =  "[%s]爬虫关闭提醒" % spider.name          

        mailers.send(to  =  {"admin@qq.com","quinns@aliyun.com"},  subject=subject,  body=body)

这样就会在收到爬虫关闭信号的时候,通过abgdefg@qq.com给指定的admin@qq.comquinns@aliyun.com发送邮件(实际应用的时候可以考虑给1个或多个邮箱发送),邮件内容是body,邮件标题是subject。

3 在邮件里添加爬虫停止信息,  写法很多,除了def   close 还可以:

def__init__(self):     ### 监听信号量 

        super(YoutubeapiSpider, self).__init__()    

        #收到spider_closed信号时,调用下面的close方法发送调用下面的close方法来发送通知邮件通   

         dispatcher.connect(self.spider_closed, signals.spider_closed)

def   spider_closed(self, spider, reason):# 上方的信号量触发这个方法

        stats_info = self.crawler.stats._stats# 爬虫结束时控制台信息

        body ="爬虫[%s]已经关闭,原因是: %s.\n以下为运行信息:\n %s"% (spider.name, reason, stats_info)      

        subject ="[%s]爬虫关闭提醒"% spider.name      

        mailers.send(to={"513720453@qq.com"},  subject=subject,  body=body)

只要满足触发条件,就可以发送指定内容的邮件。

4  邮件配置的坑,在使用过程中,如果发送邮件后,scrapy报出如下错误信息:

通过多方排查,依旧没有资料信息。后来无意中改动了邮件发送配置中的端口,就解决了这个问题

只要将原来的25端口改成465即可。(猜测跟邮件服务器pop3的ssl有关,未亲自确认)

这里虽然只是以爬虫关闭来举例,实际上可以监控更多的行为操作,比如百度翻译的接口超量、捕获一些特殊的异常等。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容