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

通过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 = sendercrawler.signals.connect(self.spider_idle, signal=signals.spider_idle)crawler.signals.connect(self.spider_closed, signal=signals.spider_closed)@classmethoddef from_crawler(cls,crawler):if not crawler.settings.getbool('MYEXT_ENABLED'):raise NotConfiguredmail_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 hdef 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.namesubject = '[%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

部分资料参考自:必学智库

利用scrap实现发送邮件,一个小实例相关推荐

  1. html class和id,css教程之样式表的基本语法(二) class(类)和id的一个小实例

    class(类)和id的一个小实例 在上一节中我们了解了如何为特定的标签定义样式,例如我们利用 "h1{font-size: 12px;}"将页面内所有的标题1的字体大小改为了12 ...

  2. 利用JML开发的一个小例子,附详细注释

    利用JML开发的一个小例子,附详细注释.有问题的地方希望大家能帮我提出来,呵呵 /**/ /*  * msntest.java  *  * Created on 2007年4月11日, 下午1:40 ...

  3. Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写

    测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...

  4. 使用Bootstrap框架写的一个小实例

    今天学习了一下Bootstrap框架,,写一个小实例练练手,感受一下bootstrap兼容三端的强大. <!doctype html> <html lang="zh-CN& ...

  5. 一个小实例——借书Demo

    一个小实例--借书Demo Step 1 布局文件 Step 2 初始化控件 Step 3 初始化数据 第一步 创建数据model 第二步 初始化数据 Step 4 添加监听器 实现基本功能 Step ...

  6. 杜邦接口还有一个跟他相反的叫什么_C++|一个小实例理解STL六大部件

    STL主要包含容器(containers).迭代器(iterators).空间配置器(allocator).配接器(adapters,或叫适配器).算法(algorithms).仿函数(functor ...

  7. 福利来啦,送给大家利用Python做出的一个小游戏源码,不要错过哟

    从小到大玩过很多的游戏,在我小时候,能玩游戏的地方不多,那时玩游戏都是偷摸玩的,只要是个游戏就觉得非常有趣,比较经典的有魂斗罗,拳皇,超级玛丽,贪吃蛇,俄罗斯方块等游戏:发展到现在,玩游戏已经成为生活 ...

  8. 每天一个小实例——使用pdfplumber提取pdf表格及文本,并保存到excel

    pdfplumber简介 (1)可以方便地获取pdf的各种信息,包括文本.表格.图表.尺寸等,它不支持修改或生成pdf,也不支持对pdf扫描件的处理 (2)pdfplumber中有两个基础类,PDF和 ...

  9. 关关难过关关过——EPICS base 安装和利用makeBaseApp.pl建立一个IOC实例

    参考了很多这个文章https://blog.csdn.net/u013963632/article/details/78138217?locationNum=8&fps=1 这里安装的版本是3 ...

最新文章

  1. 从根因入手,更有效率,效果也更好
  2. 视频|每日CeBIT:IBM九大展区各显神通,传统工业与工业4.0的博弈
  3. 指令—— 数据绑定指令||数据响应式||双向数据绑定指令
  4. linux服务器 远程桌面,如何远程桌面Linux服务器
  5. SKlearn参数详解—随机森林
  6. Mysql对字符串去掉前后空格(trim)或者指定字符
  7. 月均数据_药品销售数据分析案例
  8. 猎豹MFC--CFile类家族介绍ADO连接数据库 打开数据库 关闭数据库 连接字符串
  9. 新概念51单片机C语言教程纠错(1)
  10. 2道编程题:1.给定一个字符串,计算字符串中数值的个数并求和。
  11. gitlab VS github
  12. 函数call相关[ASM]
  13. numpy 辨异(四)—— np.repeat 与 np.tile
  14. 2012.4.19总结(二)
  15. Linux下MongoDB非正常关闭启动异常解决方法
  16. php pdo 与对比mysql,php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例...
  17. C语言和win32绿色鼠标连点器,带代码(Windows)
  18. 【猿如意】中的『XMind』工具详情介绍
  19. [ORACLE] ORA-00054 错误的解决方案
  20. java输入语句怎么写

热门文章

  1. Beta冲刺(8/7)——2019.5.30
  2. matlab画邦加球,一种测量应力方向的光纤传感器的制作方法
  3. IPMsg飞鸽传书网络协议解析手记
  4. 二级路由dhcp关闭连不上wifi_北京苹果iPhone 11Pro Max手机无法连接wifi解决小窍门...
  5. 快手小程序研发总结页面跳转参数携带需注意
  6. OC中常用的英文发音和注解
  7. 使用Django1.7开发熙鱿记官网
  8. QSetting 类使用
  9. MySQL可重复读和读已提交实现原理,深入理解MVCC。
  10. 微信小程序开发入门(连载)—— 微信公众平台配置