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. MySQL性能优化神器—explain

    一.explain是什么? 简单来讲就是官方给的一个优化工具,直接在你的SQL语句前加上explain,执行整条语句,之后你就可以根据执行结果优化你的SQL啦,废话不多说,直接刚实例 测试实例 1.创 ...

  2. python高级编程笔记一 正则表达式

    事例

  3. 4月22日MySQL学习

    前面学习的知识基本都是概念知识没有什么代码,然后还有图形界面来辅助学习. 今天学习了MySQL的存储引擎,最常用的两种 MYISAM:不支持事务,也不支持外键,但是访问速度快. INNODB:支持事务 ...

  4. python3 整数类型PyLongObject 和PyObject源码分析

    python3 整数类型PyLongObject 和PyObject源码分析 一 测试环境介绍和准备 测试环境: 操作系统:windows10 Python版本:3.7.0 下载地址 VS版本:vs2 ...

  5. IIS7.0 asp不能连接access数据 静态系统后台列表不显示 的问题

    首先看一下系统磁盘的格式,看是NTFS的还是FAT32的,如果是NTFS的一般就是权限的问题,因为iis读取数据库在系统盘是有缓存的,所以对权限有要求,找到系统盘缓存目录: C:/Windows/te ...

  6. 【Code】numpy、pytorch实现全连接神经网络

    """ 利用numpy实现一个两层的全连接网络 网络结构是:input ->(w1) fc_h -> relu ->(w2) output 数据是随机出 ...

  7. 【Linux】CentOS7下安装JDK详细过程

    https://www.cnblogs.com/sxdcgaq8080/p/7492426.html

  8. Nginx-动态添加模块

    Nginx动态添加模块 平滑升级 已经安装好的Nginx动态添加模块 说明: 已经安装好的Nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 这里已安装第三方nginx-rtmp-module ...

  9. HTTP与HTTPS(转)

    一.什么是HTTP? 什么是HTTPS?  HTTP:(Hyper Text Transfer Protocol 超文本传输协议) HTTPS:(Hyper Text Transfer Protoco ...

  10. Node的安装和进程管理

    安装nvm git clone https://github.com/creationix/nvm.git source nvm/nvm.sh 安装node nvm install 6.14.4(版本 ...