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. Linux 安装多个版本JDK并设置默认版本

    1 官网下载JDK版本 jdk-8u181-linux-x64.tar.gz 2 利用ssh工具上传安装包到Linux系统 传至:/usr/local 3 Linux用户安装的程序一般放在 /usr/ ...

  2. OpenCV4.1.0实践(2) - Dlib+OpenCV人脸特征检测

    待更! 参考: python dlib opencv 人脸68点特征检测

  3. swiftmailer时没有设置https的选项,才可以发送成功。在linux下面

    <?php $su = 'register'; $ge = '1362836763@qq.com'; $co = 'Please register!'; send_mail($su,$ge,$c ...

  4. ORACLE数据闪回

    ALTER TABLE SPM_CON_PAYMENT_RECEIPT ENABLE ROW MOVEMENT;   -- 表名 FLASHBACK TABLE SPM_CON_PAYMENT_REC ...

  5. OpenStack视图

    OpenStack视图 OpenStack视图是个全局资源的概念,统计了OpenStack所纳管资源的总量和使用量,因此OpenStack视图的资源通常又称为物理资源.OpenStack基于该资源使用 ...

  6. Django中ORM介绍

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  7. 20165223《网络对抗技术》Exp5 MSF基础应用

    目录 -- MSF基础应用 实验说明 实验任务内容 基础问题回答 实验内容 主动攻击 ms17_10_eternalblue(成功) ms17_10_psexec(成功) ms08_067_netap ...

  8. HDU4899 Hero meet devil DP套DP

    陈老师的题QwQ 原题链接 题目大意 有两个字符串\(S\)和\(T\)(都只能由'A','C','G','T'这四个字符组成),\(S\)已知\(T\)未知,还知道\(S\)的长度为\(m\).求满 ...

  9. spring问题

    1.The matching wildcard is strict ,but no declaration can be found for element 'tx:annotation-driven ...

  10. SEO基础内容

     学习SEO人群 网络设计师 网站站长 搜索引擎相关人员 网络营销顾问 企业主 搜索引擎 Yahoo msn google baidu SEM包括SEO,竞价排名等 搜索引擎爬虫流程 派出爬虫-> ...