Python数据挖掘将爬取数据每日邮件推送给指定人和附件内容
爬取数据想要实时知道每天的动态,加上邮箱推送岂不是更好,每天我在地铁上就能知道今天发生了什么大事。
前提是先定时爬取数据,然后推送数据在数据库读取,定义下主题即可实现,大部分代码参考之前unittest测试用例时的邮箱配置。我们使用两段代码,一部分是将标题内容在邮件中显示,二部分是在邮件中添加附件和链接
我习惯多做,哪怕失败,废话不多说将调试后的结果经验分享给大家,下面是详细代码:
#print('=====================标题显示在邮件中=====================')#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2020/8/23 10:37# @Author : Jianhua Wang# @Site : 敏感话题在邮件中添加链接# @File : sendEmail2.py# @Software: PyCharm import smtplibfrom email.mime.text import MIMEText# import scheduleimport pymysqlimport time user = '我是126的邮箱'pwd = '126邮箱的授权登陆码'to = '要发送给谁' # 可以设置多个收件人,英文逗号隔开,如:'***@qq.com, ***@163.com'#邮件发送方法def send_email(): # 1.连接数据库 db = pymysql.connect(host='localhost', port=3306, user='root', password='root', database='pachong', charset='utf8') company = '阿里巴巴' #可以定义多个公司名称,注意-下面的sql要用in就不是等于了哈 today = time.strftime("%Y-%m-%d") # 日期格式要与数据库中的date一致,否则取不到内容 cur = db.cursor() # 获取会话指针,用来调用SQL语句 sql = 'SELECT * FROM test WHERE company = %s AND date = %s' # SQL语句 cur.execute(sql, (company,today)) # 执行SQL语句 data = cur.fetchall() # 提取所有数据,并赋值给data变量 print(data) #调试用的 cur.close() # 关闭会话指针 db.close() # 关闭数据库链接 # 2.设置邮件正文和附件的msg mail_msg = [] mail_msg.append('<p style="margin:0 auto">尊敬的简化小主,您好,以下是今天的热点话题监控报告,望查阅:</p>') # style="margin:0 auto"用来调节行间距 mail_msg.append('<p style="margin:0 auto"><b>一、阿里巴巴舆情报告</b></p>') # 加上<b>表示加粗 for i in range(len(data)): href = '<p style="margin:0 auto"><a href="' + data[i][2] + '">' + str(i + 1) + '.' + data[i][1] + '</a></p>' mail_msg.append(href) mail_msg.append('<br>') # <br>表示换行 mail_msg.append('<p style="margin:0 auto"><b>二、腾讯热点话题报告</b></p>') # 加上<b>表示加粗 mail_msg.append('<p style="margin:0 auto">祝好</p>') mail_msg.append('<p style="margin:0 auto">简化</p>') mail_msg = '\n'.join(mail_msg) print(mail_msg) # 3.添加正文内容 msg = MIMEText(mail_msg, 'html', 'utf-8') # 4.设置邮件主题、发件人、收件人 msg["Subject"] = "简化的监控报告" msg["From"] = user msg["To"] = to # 5.发送邮件 s = smtplib.SMTP_SSL('smtp.126.com', 465) # 选择126邮箱服务,默认端口为465 s.login(user, pwd) # 登录qq邮箱 s.send_message(msg) # 发送邮件 s.quit() # 退出邮箱服务 print('发送成功!') send_email() # 调用邮件方法# 建立一个schedule任务,每天下午5点钟执行指令# schedule.every().day.at("8:30").do(send_email)# while True:# schedule.run_pending()# time.sleep(10)
一部分效果:
一部分多个大标题自己灵活添加即可
#print('=====================邮件中添加附件=====================')
import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartuser = '邮箱地址'pwd = '登录授权码'to = '收件人' # 可以设置多个收件人,英文逗号隔开,如:'***@qq.com, ***@163.com' # 1.设置正文和附件的msgmsg = MIMEMultipart() # 2.添加正文内容,邮件正文内容mail_msg = '''<p>这个是一个常规段落</p><p><a href="https://www.baidu.com">这是一个包含链接的段落</a></p>'''msg.attach(MIMEText(mail_msg, 'html', 'utf-8')) # 3.再添加附件,这里的文件名可以有中文,但下面第三行的filename不可以为中文att1 = MIMEText(open('E:\\test.docx', 'rb').read(), 'base64', 'utf-8') #本地要有文件或者搭建IIS服务器获取att1["Content-Type"] = 'application/octet-stream'# 下面的filename不可以为中文!!会无法解析att1["Content-Disposition"] = 'attachment; filename="test.docx"'msg.attach(att1) # 4.(固定写法)设置邮件主题、发件人、收件人msg['Subject'] = '测试邮件主题!'msg['From'] = usermsg['To'] = to # 5.发送邮件(固定写法)s = smtplib.SMTP_SSL('smtp.126.com', 465)s.login(user, pwd)s.send_message(msg) # 发送邮件s.quit()print('发送成功!')
效果如下:
好累,终于写完了~ 算是小圆满了,还是有好多细的知识点还要学习,加油吧!