写在前面
关于获取文章自动发送到邮箱,这类需求其实可以写好几个网站,弄完博客园,弄CSDN,弄掘金,弄其他的,网站多的是呢~哈哈
先从博客园开始,基本需求,获取python板块下面的新文章,间隔60分钟发送一次,时间太短估摸着没有多少新博客产出~
抓取的页面就是这个
https://www.cnblogs.com/cate/python
需求整理- 获取指定页面的所有文章,记录文章相关信息,并且记录最后一篇文章的时间
- 将文章发送到指定邮箱,更新最后一篇文章的时间
查看一下需要导入的模块 模块清单
import requests
import time
import re
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
初始化基本数据
# 初始化数据
def __init__(self):
self.start_url = "https://www.cnblogs.com/cate/python"
self.headers = {
"user-agent": "Mozilla/..... Safari/537.36",
"referer": "https://www.cnblogs.com/cate/python/"
}
self.pattern = r'[\s\S.]*?(.*?)[\s\S.]*?[\s\S.]*?(.*?)([\s\S.]*?)'
self.last_blog_time = 0
self.need_send_articles = []
参数说明
- self.start_url 数据爬取地址
- self.headers 头文件
- self.pattern 正则表达式,用来匹配我们需要的数据内容的,你可以使用BS4,LXML,PyQuery等内容实现
- self.last_blog_time 最后一篇博客的更新时间
- self.need_send_articles 需要发送的博客地址
解析博客网页内容
涉及代码较多,我将关键点编写相应的注释
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
# 解析网页内容
def get_articles(self):
try:
# 正常的数据获取
res = requests.get(self.start_url,headers=self.headers,timeout=3)
except Exception as e:
print("error %s"% e)
time.sleep(3)
return self.get_articles() # 重新发起请求
html = res.text
# 这个地方的正则表达式是考验你正则功底的地方了
all = re.findall(self.pattern,html)
# 判断,如果没有新文章
last_time = self.change_time(all[0][3].strip().replace("发布于 ", ""))
if last_time self.last_blog_time):
self.need_send_articles.append({
"url":item[0],
"title":item[1],
"author":item[2],
"time":public_time
})
# 文章获取完毕,更新时间
self.last_blog_time = last_time
##### 测试输出
print(self.need_send_articles)
print("现在文章的最后时间为",self.last_blog_time)
##### 测试输出
时间字符串转换成时间戳
采用时间戳可以直接比较大小,非常方便
def change_time(self,need_change_time):
'''
# 时间的转换
:param need_change_time:
:return:返回时间戳
'''
time_array = time.strptime(need_change_time, "%Y-%m-%d %H:%M")
time_stamp = int(time.mktime(time_array))
return time_stamp
邮件发送环节
本篇博客采用的是QQ邮箱发送 关于QQ邮箱发送的一些参考文章,我给大家列一下,方便你查阅
参考文章
# https://blog.csdn.net/qiye005/article/details/80789666
# https://blog.csdn.net/Momorrine/article/details/79881251
# https://www.cnblogs.com/lovealways/p/6701662.html
# https://www.cnblogs.com/yufeihlf/p/5726619.html
因为我采用的是QQ邮箱,所以有的地方设定起来比较麻烦,发短信还花了2毛钱,建议你采用其它的邮箱,设置是一样的哦~~
发送邮件send_email函数
你看一下上面的文章之后,就可以对邮件发送进行相应的编写了,非常简单 QQ邮箱是SSL认证的邮箱系统,因此用QQ邮箱发送邮件,需要创建一个SMTP_SSL对象,而不是SMTP对象
# 发送邮件
def send_email(self,articles):
smtp = smtplib.SMTP_SSL() # 这个地方注意
smtp.connect("smtp.qq.com",465)
smtp.login("860866679@qq.com", "授权码")
sender = '860866679@qq.com'
receivers = ['找个自己的其他邮箱@163.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
# 完善发件人收件人,主题信息
message = MIMEMultipart()
message['From'] = formataddr(["博客采集器", sender])
message['To'] = formataddr(["hi,baby", ''.join(receivers)])
subject = '你有新采集到的文章清单'
message['Subject'] = Header(subject, 'utf-8')
# 正文部分
html = ""
for item in articles:
html+=("{title}--文章作者{author}--发布时间{time}
".format(title=item["title"],url=item["url"],author=item["author"],time=item["time"]))
textmessage = MIMEText('新采集到的文章清单
' +html,
'html', 'utf-8')
message.attach(textmessage)
# 发送邮件操作
smtp.sendmail(sender, receivers, message.as_string())
smtp.quit()
邮箱收到邮件
当收到邮件的那一刻,你就可以感受到happy了~ 
关注
打赏
热门博文
- Python骚操作,实现驾考自动答题,这就直接满分了?
- 用Python自动实现图表可视化操作,提高工作效率,又能有更多的时间摸鱼了~
- Python:用tkinter制做一个音乐下载小软件
- Python丨小学妹喜欢看漫画,于是我写了四十行代码获取了它所有漫画
- 女同桌找我要表情包,还好我会Python,分分钟给她下载几十个G...
- 为了防止这上面的文章被封,我连夜用Python获取了它所有内容,真香~
- 这个Python读取文件的方法,堪称天花板级别...
- Python做一个通过输入bv号就能下载视频的工具,评论和弹幕也不放过
- Python爬虫何如抓包?这三个案例手把手教会你,非常详细...
- Python:50行代码实现下载小说,图片章节可自动识别转文字保存...