scrapy发送邮件

应用场景:在爬虫关闭或者爬虫空闲时可以通过发送邮件的提醒。

通过twisted的非阻塞IO实现,可以直接写在spider中,也可以写在中间件或者扩展中,看你具体的需求。

在网上找了很多教程,都是很多年前的或者就是官网搬运的,一点实际的代码都没有,所以就自己尝试了一下,由于本人也是爬虫新手,轻喷,轻喷!

看下面的示例代码前,先看下官网,熟悉基本的属性。

官网地址sending e-mail:<https://docs.scrapy.org/en/latest/topics/email.html?highlight=MailSender>

  1. 首先在settings同级的目录下创建extendions(扩展)文件夹,

    代码如下:

    import logging
    from scrapy import signals
    from scrapy.exceptions import NotConfigured
    from scrapy.mail import MailSender
    logger = logging.getLogger(__name__)
    class SendEmail(object): def __init__(self,sender,crawler):
    self.sender = sender
    crawler.signals.connect(self.spider_idle, signal=signals.spider_idle)
    crawler.signals.connect(self.spider_closed, signal=signals.spider_closed) @classmethod
    def from_crawler(cls,crawler):
    if not crawler.settings.getbool('MYEXT_ENABLED'):
    raise NotConfigured mail_host = crawler.settings.get('MAIL_HOST') # 发送邮件的服务器
    mail_port = crawler.settings.get('MAIL_PORT') # 邮件发送者
    mail_user = crawler.settings.get('MAIL_USER') # 邮件发送者
    mail_pass = crawler.settings.get('MAIL_PASS') # 发送邮箱的密码不是你注册时的密码,而是授权码!!!切记! sender = MailSender(mail_host,mail_user,mail_user,mail_pass,mail_port) #由于这里邮件的发送者和邮件账户是同一个就都写了mail_user了
    h = cls(sender,crawler) return h def spider_idle(self,spider):
    logger.info('idle spider %s' % spider.name) def spider_closed(self, spider):
    logger.info("closed spider %s", spider.name)
    body = 'spider[%s] is closed' %spider.name
    subject = '[%s] good!!!' %spider.name
    # self.sender.send(to={'zfeijun@foxmail.com'}, subject=subject, body=body)
    return self.sender.send(to={'zfeijun@foxmail.com'}, subject=subject, body=body)

    这里为什么是return self.sender.send,是因为直接用sender.send会报builtins.AttributeError: 'NoneType' object has no attribute 'bio_read'的错误(邮件会发送成功),具体原因不是很懂,有大牛知道的可以指导一下。

    解决方法参考:<https://github.com/scrapy/scrapy/issues/3478>

    sender.send前加return就好了。

  2. 在扩展中写好代码后,需要在settings中启用

EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': 300,
'bukalapak.extendions.sendmail.SendEmail': 300,
}
MYEXT_ENABLED = True

转载请注明出处!

scrapy发送邮件的更多相关文章

  1. scrapy中间件中发送邮件

    背景介绍:之前写过通过通过scrapy的扩展发送邮件,在爬虫关闭的时候发送邮件.那个时候有个问题就是MailSender对象需要return出去.这次需要在中间件中发送邮件,但是中间件中不能随便使用r ...

  2. scrapy爬虫学习系列七:scrapy常见问题解决方案

    1 常见错误 1.1 错误: ImportError: No module named win32api 官方参考:https://doc.scrapy.org/en/latest/faq.html# ...

  3. 天气提醒邮件服务器(python + scrapy + yagmail)

    天气提醒邮件服务器(python + scrapy + yagmail) 项目地址: https://gitee.com/jerry323/weatherReporter 前段时间因为xxx上班有时候 ...

  4. Scrapy计划表

    第一步 Scrapy 一览:理解Scrapy是什么,他能帮到你什么 安装指南:在电脑上安装Scrapy Scrapy 教程:编写第一个Scrapy项目 示例:通过前人写好的Scrapy项目进行学习 基 ...

  5. Learning Scrapy 中文版翻译 第二章

    为了从网页中提取信息,你有必要对网页的结构做一些了解.我们将快速学习HMTL,HTML数状结构以及用XPath在网页上提取信息 HTML, DOM树结构以及XPath 让我们花一点时间来了解当用户在浏 ...

  6. 34、Scrapy 知识总结

      Scrapy 知识总结   1.安装   pip install wheel pip install https://download.lfd.uci.edu/pythonlibs/q5gtlas ...

  7. scrapy 基础组件专题(五):自定义扩展

    通过scrapy提供的扩展功能, 我们可以编写一些自定义的功能, 插入到scrapy的机制中 一.编写一个简单的扩展 我们现在编写一个扩展, 统计一共获取到的item的条数我们可以新建一个extens ...

  8. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  9. 利用SQLServer数据库发送邮件

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 这个应用案例很多,一般都是预警,比如异常连接的时候,或者数据库报错的时候.等等,,, 先 ...

随机推荐

  1. 数据的存储方式:SQLiteOpenHelper的用法

    Android为了让我们能够更加方便的的管理数据,专门提供了一个SQLiteOpenHelper类,它是一个抽象类,如果我们想要使用它,就需要创建一个自己帮助类去继承它,而且它有两个抽象的方法,分别是 ...

  2. win 执行puppet

    C:\scripts\win_exec_proxy.bat  \\adsoft.base-fx.com\puppet\puppet\files\Windows_10_x64\C\user\logon\ ...

  3. OpenJudge-bailian 3454 秦腾与教学评估

    http://bailian.openjudge.cn/practice/3454?lang=en_US 题目 在秦腾进入北京大学学习的第一个学期,就不幸遇到了前所未有的教学评估.在教学评估期间,同学 ...

  4. git的命令行输出正确地显示中文文件名

    参考:https://stackoverflow.com/questions/22827239/how-to-make-git-properly-display-utf-8-encoded-pathn ...

  5. HNOI2018寻宝游戏

    https://www.luogu.org/problemnew/show/P4424 题解 我们首先按位考虑. 如果有一位最终的结果为1,那么我们可以把树的序列看成一个二进制数,先出现的在底位,后出 ...

  6. 如何安装多个mysql 或者如何更改mysql服务名

    此教程适合免安装版本(压缩包)的mysql: 有的时候你需要一台计算机上安装不同的mysql版本,而不同版本的mysql服务名称都是mysql,安装时会有冲突 解决的办法就是安装的时候更改名字 在命令 ...

  7. 快速掌握Nginx(四) —— Nginx日志切片和常用配置总结

    1.Nginx日志管理 1.日志简单介绍 Nginx提供了日志记录的功能,日志文件在对我们管理网站十分有用,通过访问日志(access_log)我们可以获取请求来源.客户端信息.请求的资源等信息:通过 ...

  8. C#之C#、.NET Framework、CLR的关系

    转自 https://www.cnblogs.com/cocoon/p/4997005.html 补补基础: 很多人没有将C#..NET Framework(.NET框架).CLR(Common La ...

  9. numpy&pandas补充常用示例

    Numpy [数组切片] In [115]: a = np.arange(12).reshape((3,4)) In [116]: a Out[116]: array([[ 0, 1, 2, 3], ...

  10. css/css3 未知元素宽高,垂直居中和水平居中

    未知元素的宽高情况下  垂直居中和水平居中 第一种 flex盒布局 (推荐) /*弹性盒模型*/ /*主轴居中对齐*/ /*侧轴居中对齐*/ .ele{ display:flex; justify-c ...