当scrapy爬取完成以后会发送详细信息到邮箱

1.首先编写邮件发送模块

#!usr/bin/env python
# -*- coding:utf-8 -*-
"""
@file: emailHandler.py
@time: 2018/04/21
"""
# 邮件服务封装 import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr status = {} # 状态码
pipeline_item = {"item": 0, # 成功item项
"item_error": 0, # 失败item项
"error_info": "" # 失败原因
} spider_time = {"start": "", "end": ""} # 开始结束时间 class EmailHandler(object): def __init__(self, user, password, type_=0):
"""
:param user:str 发送人邮箱地址(用户名)
:param password:str 发送人申请的授权码
:param type_:int 0 为QQ邮箱 1 为163邮箱
"""
self.__QQ = {'smtp': 'smtp.qq.com', 'port': 465}
self.__163 = {'smtp': 'smtp.163.com', 'port': 25}
self.user = user
self.password = password
if type_ == 0:
self.server = smtplib.SMTP_SSL(self.__QQ['smtp'], self.__QQ['port'])
self.server.login(self.user, self.password)
elif type_ == 1:
self.server = smtplib.SMTP_SSL(self.__163['smtp'], self.__163['port'])
self.server.login(self.user, self.password) def send_mail(self, to, subject, content=None):
"""
:param to:str 接收人邮箱地址
:param subject:str 邮件标题
:param content:str 邮件内容
:return:bool True 成功 False 失败
"""
try:
if not content:
content = "\r\n"
for key in status.keys():
content += "状态码%s:%s次\r\n" % (key, status.get(key))
content += "\r\n"
content += "存入数据库成功条数:%s 条\r\n存入数据库失败条数:%s 条\r\n" % (pipeline_item.get("item"),
pipeline_item.get('item_error')) if pipeline_item.get('item_error') > 0:
content += "失败原因:%s" % pipeline_item.get('error_info')
content += "\r\n" content += "爬虫启动时间:%s \r\n爬虫结束时间:%s" % (spider_time.get("start"), spider_time.get("end"))
msg = MIMEText(content, 'plain', 'utf-8')
msg['From'] = formataddr(['', self.user])
msg['To'] = formataddr(['', to])
msg['Subject'] = subject self.server.sendmail(self.user, to, msg.as_string())
print("【%s】邮件发送成功" % subject)
return True
except Exception as f:
print("【%s】邮件发送失败,请检查信息" % subject)
return False

  

2.提供邮件提示所有数据

2.1在下载中间件中添加如下代码

from xxx.emailHandler import *
def process_response(self, request, response, spider):
# Called with the response returned from the downloader. # Must either;
# - return a Response object
# - return a Request object
# - or raise IgnoreRequest
if response.status in status.keys():
status[response.status] += 1
else:
status[response.status] = 0
return response

2.2 在管道中加入如下代码

from xxx.middlewares import pipeline_item
def process_item(self, item, spider):
client = MongoClient(self.host, self.port)
db_auth = client.xiaosidb
db_auth.authenticate(self.user, self.passwd)
db = client[self.db]
table = db[self.table]
# data = dict(item)
try:
table.insert(dict(item))
pipeline_item['item'] += 1
except Exception as e:
pipeline_item['item_error'] += 0
pipeline_item['error_info'] = e
return item

2.3在spiders 爬虫程序中加入如下代码

from xxx.middlewares import *
def start_requests(self):
spider_time['start'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
def close(spider, reason):
spider_time['end'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
to_sender = 'xxxx' # 要发送的邮箱
mail = EmailHandler(user='xxxx', password='xxx')
mail.send_mail(to_sender, '邮件标题')

3. 当爬虫运行完毕以后会发送邮件

python-邮件提醒功能的更多相关文章

  1. Jenkins 实现前端自动打包,自动部署代码及邮件提醒功能

    在之前的公司,我们前端使用webpack构建项目,项目构建完成后,我们会使用ftp或linux的一些命令工具上传我们的文件到服务器上,这种方式虽然是可以,但是最近面试的时候,人家会问我前端如何部署项目 ...

  2. Python邮件发送功能

    import smtplibfrom email.mime.text import MIMEText_user = "1147016115@qq.com"#发件人_pwd = &q ...

  3. ubuntu下为thunderbird添加邮件提醒功能(转载)

    转自:http://blog.csdn.net/zhangt85/article/details/9154525 1.“工具”-->“附件组件” 2.搜索“new_mail_attention” ...

  4. [转载]TFS发送邮件提醒功能

    第一次使用TFS 2010,发现有Project Alerts功能,就是项目组工程中若有任何改动时,TFS Server会自动发邮件提醒.Microsoft提供的配置方法(http://msdn.mi ...

  5. EWS Managed API 2.0 设置获取邮件自动回复功能

    摘要 最近要在邮件提醒功能中添加,自动回复的功能.在移动端获取用户在outlook上是否开启了自动回复功能,如果用户在outlook上开启了自动回复功能, 获取用户自动回复的内容,如果没有开启,用户可 ...

  6. Python自定义任务发邮件提醒

    前言 在工作中,有时会有一些定期需要执行的任务或在将来某一天需要执行的任务,为避免疏漏,设计个小工具,发邮件提醒自己去处理. 方案简介 1.建立一个Excel文件,里面定义好待提醒的任务 2.建立一个 ...

  7. Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)

    实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...

  8. Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)

    实现抽象类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...

  9. Python-定时爬取指定城市天气(二)-邮件提醒

    目录 一.概述 二.模块重新划分 三.优化定时任务 四.发送邮件 五.源代码 一.概述 上一篇文章python-定时爬取指定城市天气(一)-发送给关心的微信好友中我们讲述了怎么定时爬取城市天气,并发送 ...

  10. PyQt5实现邮件合并功能(GUI)

    1. 实战Word批量 需要处理批量替换word的一些数据,数据源从Excel中来. Excel的百分数会变为数字,以及浮点数会多好多精度,为了原汁原味的数据,直接复制数据到文本文件.通过\t来分隔即 ...

随机推荐

  1. vs2013、vs2015使用.net4.5框架智能提示英文转成中文

    安装完VS2013.VS2015使用.net framework 4.5框架时,代码补全中智能提示信息全是英文解决方案:关闭VS2013.VS2015:将zh-Hans 目录替换以下目录 C:\Pro ...

  2. QT windeployqt

    qt发布release版本时需要打包一些dll,需要哪些呢?请看截图: 在qt的安装包下找到这些文件,放在release文件夹下即可,当然有些时候也会需要一些其他的,比如含有串口的程序还需要加入Qt5 ...

  3. 从头开始学gradle【各系统安装gradle】

    所有的环境都是基于jdk1.8 java -version windows安装 下载对应的gradle.zip安装包,解压到指定文件即可,然后配置相应的环境变量即可使用 linux/mac 安装 mk ...

  4. JSP & EL & JSTL

    JSP 什么是JSP 用户角度看待 ,就是是一个网页,从程序员角度看待 ,是继承了servlet的java类,所以可以直接说jsp 就是一个Servlet. 为什么用JSP 用于显示一些动态数据,可以 ...

  5. Python3学习笔记(urllib模块的使用)

    转载地址:https://www.cnblogs.com/Lands-ljk/p/5447127.html 1.基本方法 urllib.request.urlopen(url, data=None,  ...

  6. PHP取一算法

    一群猴子排成一圈,按1,2,…,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大 ...

  7. mybatis的xml中sql语句中in的写法(迭代遍历)

    这里使用 foreach标签 <foreach  item="item" collection="listTag" index="index&q ...

  8. java gui 2

    1,编写程序,随机生成两个数,用户输入两个数的和,并进行评判.程序的初始界面如下: 点击“获取题目”,随机生成两个100以内的int类型的数,界面如下: 提示: (1)使用java.util.Rand ...

  9. DDD - 概述 - (一)

    本片将介绍以下内容: 1).DDD是什么? 2).怎么使用DDD? 3).使用DDD应该规避或者注意什么? 一.DDD是什么? 简言之:领域驱动设计(domain driven design),顾名思 ...

  10. java变量和javascript变量之间的传递

    java代码是运行在服务器上的,返回的值只是静态的存在于页面,而javascript是脚本语言,是运行在客户端的!它们是两种完全不同的语言,变量不能直接进行交换,但是通过一定的方式,变量可以传递. j ...