以下内容为本人原创,欢迎大家观看学习,禁止用于商业用途,转载请说明出处,谢谢合作!
大噶好,我是python练习时长3个月的Yhen。
在上篇文章中,我已经详细介绍了第一步——微博爬虫
传送门:【python热搜爬虫+定时发送邮件操作①】不会吧不会吧!不会2020了还有人需要用软件看微博热搜吧?
这篇文章将为大家分享第二步——定时发送邮箱操作!
希望大家能够喜欢!
不错吧~以后每天一睡醒,打开微信查看今天的邮件就可以知道今天的热搜信息了,哪还要打开软件这么麻烦呀,美滋滋 ~
大家看完这两篇文章后就可以实现这样的效果啦~
话不多说,马上起飞
①库的准备和安装
今天要介绍的是定时发送邮件,这是今天要用到的库以及在这篇文章中的使用方式
smtplib 连接邮箱服务器
time 用于设置延时
email 填写邮件头和邮件内容
schedule 用于设置定时任务
大家安装第三方库的时候只需要在终端输入 pip install +对应的库名即可。如(pip install schedule)
第三方库准备后,还不够哦
②开通QQ邮箱的SMTP服务(以QQ邮箱为例,其他邮箱大同小异)
开通的方式也很简单
首先在邮箱首页右上角找到自己的头像,点击
点击设置
如图,找到第三方服务
点击开启服务
然后会让你进行身份验证
认证成功后,你就有了授权码啦~成功开通了SMTP服务啦
授权码最好记下来,因为等下登录服务器的时候要用到
都准备好以后,就可以愉快的开始实操啦
首先将要用到的库导入(今天要结合上一篇的内容,所以也需要爬虫库)
import requests
import smtplib
import schedule
import time
from pyquery import PyQuery as pq
from email.mime.text import MIMEText
from email.header import Header
import datetime
然后将上一篇爬热搜的代码封装成WeiBo_Spider函数
def WeiBo_Spider():
global date
# 微博热搜网址
url = 'https://s.weibo.com/top/summary'
# 请求微博热搜网址 获取其文本数据
res = requests.get(url).text
# 数据初始化
doc = pq(res)
# 通过类选择题提取热搜信息
td = doc('.td-02 a').items()
# 遍历数据
for x in td:
# 获取热搜文字
title = x.text()
# 获取热搜链接 并拼接成完整链接
href = 'https://s.weibo.com' + x.attr('href')
# 将文字和链接合并在一个content变量中
content = title + '\n' + href + '\n\n'
# 获取今日日期,并转换为字符串的形式。以此日期命名建立文件路径
date = datetime.datetime.now().strftime('%Y-%m-%d')
# 将文件保存以日期命名的txt文件 以追加的方式写入 编码为utf-8
f = open(date + '.txt', 'a', encoding='utf-8')
# 将热搜内容写入
f.write(content)
# 关闭写入
然后开始今天发送邮件的内容
首先定义一个发送邮件的函数
实例化一个SMTP对象后,通过SMTP连接到QQ邮箱的服务器,使用25的端口号
def send_email():
# QQ邮箱的服务器地址
mailhost='smtp.qq.com'
# 实例化一个SMTP对象
mail = smtplib.SMTP()
# 使用SMTP连接QQ邮箱服务器,端口号使用25
mail.connect(mailhost,25)
定义发件人的邮箱,密码(这里的密码就是前期准备时的那个授权码),以及收件人的邮箱地址
然后登录邮箱
sender = '你的QQ邮箱地址'
password = '开通SMTP时的授权码'
receiver = '收件人的邮箱地址'
# 登录邮箱
mail.login(sender,password)
然后将热搜爬虫爬到的内容,读取出来
注意:这里的date和爬虫函数里面的date是一样的,为了能够在这个函数中能够使用到date,要在上一个函数中将date设置为全局变量(global date)
# 读取保存的热搜txt文件的内容
f = open(date + '.txt', 'r', encoding='utf-8')
a = f.read()
然后将热搜数据写入邮件文本内容
# 写入邮件文本内容
message = MIMEText(a, 'plain', 'utf-8')
定义邮件的标题
# 定义邮件的标题
subject = '今日微博热搜'
message['Subject'] = Header(subject, 'utf-8')
最后再加一个异常捕获,发送邮件的部分就完成啦
# 异常捕获 若无错误执行以下代码
try:
mail.sendmail(sender, receiver, message.as_string())
print ('邮件发送成功')
# 若报错则打印邮件发送错误信息
except:
print ('邮件发送失败')
mail.quit()
接下来再定义一个任务函数
# 定义一个任务开始函数
def job():
print('开始发送邮件')
# 执行微博爬取任务
WeiBo_Spider()
# 执行发送邮件任务
send_email()
print(date+'任务完成')
下面是定时的操作
很简单,一行代码
比如说你想在每天的8点让程序给你发送邮件的话
# 在每天的固定时间执行任务函数
schedule.every().day.at("08:00").do(job)
即在每天的8点执行任务函数,而任务函数中就调用了爬虫函数和发送邮箱函数
最后是一个代码的部署检查
# 每隔一秒钟检查部署情况
while True:
schedule.run_pending()
time.sleep(1)
演示一下效果
现在是11:49,我让程序11:50给我发邮件
11:50,程序运行
链接点进去是这样的
没有一点点毛病吧~
当然,还是有美中不足的地方的
如果你想要每天早上都按时收到邮件
你需要满足一个其中一个条件
①必须保证你的计算机在你设置定时发送邮件的点时是开机的且运行着这个python程序。emm,所以说这有点不太现实,一般没有人会24小时开着计算机吧哈哈哈。
②.你拥有一台云服务器。云服务器是24小时不关机的,所以你就要把这个程序一直挂在云服务器上,程序到点了就会自动给你发送邮件啦~
下图是我之前挂在阿里云centos服务上的定时发送邮件的效果图~
OK~到这里就全部介绍完毕啦 ~希望对大家有所帮助!
【python热搜爬虫+定时发送邮件操作①】不会吧不会吧!不会2020了还有人需要用软件看微博热搜吧?
【爬虫+数据可视化】Yhen手把手带你爬取CSDN博客访问量数据并绘制成柱状图
【爬虫】Yhen手把手带你爬取去哪儿网热门旅游信息(并打包成旅游信息查询小工具
【爬虫】Yhen手把手带你用python爬小说网站,全网打尽,想看就看!(这可能会是你看过最详细的教程)
【实用小技巧】用python自动判断并删除目录下的空文件夹(超优雅)
【爬虫+数据库操作】Yhen手把手带你用pandas将爬取的股票信息存入数据库!
【selenium爬虫】
Yhen手把手带你用selenium自动化爬虫爬取海贼王动漫图片
【爬虫】秀才不出门,天下事尽知。你也能做到!Yhen手把手带你打造每日新闻资讯速达小工具。
【爬虫】Yhen手把手带你用python爬取知乎大佬热门文章
【爬虫】Yhen手把手教你爬取表情包,让你成为斗图界最靓的仔
【前端】学过一天的HTML+CSS后,能做出什么有趣的项目?