代码已经部署在了Linux云主机,亲测有效,需要的朋友们可以稍加修改就可以使用啦
我通过天气网这个平台获取每日天气资讯
网站比较简单没有什么反爬措施
直接上代码
import requests
import re
import time
# 我需要5个城市的每日天气资讯 分别是
# 太原市万柏林区 商洛市商州区 西安市雁塔区 北京市延庆区 宝鸡市渭滨区
url_list = ["https://tianqi.com/wanbolinqu/",
"https://tianqi.com/shangzhou",
"https://tianqi.com/yantaqu",
"https://tianqi.com/yanqing",
"https://tianqi.com/weibin"]
# 定义请求头
header = {
"user-agent": "Mozilla / 5.0(X11; Linux x86_64) AppleWebKit / 537.36(KHTML, likeGecko) "
"Chrome / 77.0.3865.120Safari / 537.36"}
text = """
现在是北京时间{year}年{month}月{day}日{hour}时{minute}分{second}秒
今日5个城市的天气状况分别为:\n
""".format(year=time.localtime().tm_year, month=time.localtime().tm_mon, day=time.localtime().tm_mday,
hour=time.localtime().tm_hour, minute=time.localtime().tm_min, second=time.localtime().tm_sec)
for url in url_list:
html = requests.get(url, headers=header, timeout=10)
data = html.content.decode('utf8')
# 每个城市的名称
name = re.search('(.*?)
.*? ', data)
# 今日份公历和农历的时间
week = re.search('(.*?) ', data)
# 今日的天气状况和最低最高气温
weather = re.search('.*?(.*?)(.*?)'
, data, re.S)
# 湿度风向紫外线等信息
shidu = re.search('(.*?)(.*?)(.*?) ', data, re.S)
# 空气质量和日出日落时间
kongqi = re.search('(.*?)(.*?)
(.*?)
(.*?) ', data, re.S)
string = """
今天是{week}
{name}的具体天气状况是\t{weather1}\t{weather2}
{shidu1}\t{shidu2}\t{shidu3}
{kongqi1}\t{kongqi2}\t{kongqi3}"\t{kongqi4}\n
""".format(week=week.group(1), name=name.group(1), weather1=weather.group(1),
weather2=weather.group(2), shidu1=shidu.group(1), shidu2=shidu.group(2),
shidu3=shidu.group(3), kongqi1=kongqi.group(1), kongqi2=kongqi.group(2),
kongqi3=kongqi.group(3), kongqi4=kongqi.group(4))
text = text+string
我参考了菜鸟教程 “Python3 SMTP发送邮件”的教程,教程言简意赅,很好理解
以下是具体代码
import smtplib
from email.mime.text import MIMEText
# 发件人邮箱账号
sender = "[email protected]"
# 收件人邮箱(可以同时给多账号发送)
receiver = "[email protected], [email protected], [email protected]"
# 邮箱域名,我是用qq邮箱发送邮件的,所以这里填了qq邮箱的域名
Host = "smtp.qq.com"
# 邮件的主题或者标题
subject = "{year}-{month}-{day} 太原商洛西安北京宝鸡5城每日天气状况".format\
(year=time.localtime().tm_year, month=time.localtime().tm_mon, day=time.localtime().tm_mday)
# MIMEText三个参数分别是邮件内容 邮件类型 编码方式
txt = "我是邮件的具体内容"
message = MIMEText(txt, _subtype="plain", _charset="utf8")
message['From'] = sender # 设置邮件发件人
message['To'] = receiver # 设置邮件收件人
message['Subject'] = subject # 设置邮件标题
try:
# Python3.7版本必须使用这个方法设置邮件传输协议证书
server = smtplib.SMTP_SSL(host=Host)
server.connect(host=Host, port=465)
# Python3.6及其以下版本同时可以使用这两种方法设置邮件传输协议证书
# server = smtplib.SMTP_SSL(Host, 465)
# 设置发件人和授权码
server.login(sender, "此处为授权码")
# 发送邮件
server.sendmail(from_addr=sender, to_addrs=message['To'].split(','), msg=message.as_string())
# 断开连接
server.close()
print("邮件发送成功")
except Exception:
print("邮件发送失败")
print(Exception)
以QQ邮箱为例
进入到邮箱之后
import requests
import re
import time
import smtplib
from email.mime.text import MIMEText
def get_weather_information():
# 我需要5个城市的每日天气资讯 分别是
# 太原市万柏林区 商洛市商州区 西安市雁塔区 北京市延庆区 宝鸡市渭滨区
url_list = ["https://tianqi.com/wanbolinqu/",
"https://tianqi.com/shangzhou",
"https://tianqi.com/yantaqu",
"https://tianqi.com/yanqing",
"https://tianqi.com/weibin"]
# 定义请求头
header = {
"user-agent": "Mozilla / 5.0(X11; Linux x86_64) AppleWebKit / 537.36(KHTML, likeGecko) "
"Chrome / 77.0.3865.120Safari / 537.36"}
text = """
现在是北京时间{year}年{month}月{day}日{hour}时{minute}分{second}秒
今日5个城市的天气状况分别为:\n
""".format(year=time.localtime().tm_year, month=time.localtime().tm_mon, day=time.localtime().tm_mday,
hour=time.localtime().tm_hour, minute=time.localtime().tm_min, second=time.localtime().tm_sec)
for url in url_list:
html = requests.get(url, headers=header, timeout=10)
data = html.content.decode('utf8')
# 每个城市的名称
name = re.search('(.*?)
.*? ', data)
# 今日份公历和农历的时间
week = re.search('(.*?) ', data)
# 今日的天气状况和最低最高气温
weather = re.search('.*?(.*?)(.*?)'
, data, re.S)
# 湿度风向紫外线等信息
shidu = re.search('(.*?)(.*?)(.*?) ', data, re.S)
# 空气质量和日出日落时间
kongqi = re.search('(.*?)(.*?)
(.*?)
(.*?) ', data, re.S)
string = """
今天是{week}
{name}的具体天气状况是\t{weather1}\t{weather2}
{shidu1}\t{shidu2}\t{shidu3}
{kongqi1}\t{kongqi2}\t{kongqi3}"\t{kongqi4}\n
""".format(week=week.group(1), name=name.group(1), weather1=weather.group(1),
weather2=weather.group(2), shidu1=shidu.group(1), shidu2=shidu.group(2),
shidu3=shidu.group(3), kongqi1=kongqi.group(1), kongqi2=kongqi.group(2),
kongqi3=kongqi.group(3), kongqi4=kongqi.group(4))
text = text+string
return text
def send_mail(text):
# 发件人邮箱账号
sender = "[email protected]"
# 收件人邮箱(可以同时给多账号发送)
receiver = "[email protected], [email protected], [email protected]"
# 邮箱域名,我是用qq邮箱发送邮件的,所以这里填了qq邮箱的域名
Host = "smtp.qq.com"
# 邮件的主题或者标题
subject = "{year}-{month}-{day} 太原商洛西安北京宝鸡5城每日天气状况".format\
(year=time.localtime().tm_year, month=time.localtime().tm_mon, day=time.localtime().tm_mday)
# MIMEText三个参数分别是邮件内容 邮件类型 编码方式
message = MIMEText(text, _subtype="plain", _charset="utf8")
message['From'] = sender # 设置邮件发件人
message['To'] = receiver # 设置邮件收件人
message['Subject'] = subject # 设置邮件标题
try:
# Python3.7版本必须使用这个方法设置邮件传输协议证书
server = smtplib.SMTP_SSL(host=Host)
server.connect(host=Host, port=465)
# Python3.6及其以下版本同时可以使用这两种方法设置邮件传输协议证书
# server = smtplib.SMTP_SSL(Host, 465)
# 设置发件人和授权码
server.login(sender, "此处为授权码")
# 发送邮件
server.sendmail(from_addr=sender, to_addrs=message['To'].split(','), msg=message.as_string())
# 断开连接
server.close()
print("邮件发送成功")
except Exception:
print("邮件发送失败")
print(Exception)
if __name__ == '__main__':
msg = get_weather_information()
send_mail(msg)
用以下命令在本机将代码传送到云主机
scp /home/long/auto_send_mail.py user@ip:/home
# /home/long/auto_send_mail.py为本机的代码路径
# user和ip分别为云主机的用户名和ip地址,之后的/home为在云主机存放路径
设置Python脚本定时执行
nano /etc/crontab
在最后添加
00 07 * * * root python3.6 /home/auto_send_mail.py
# 意思就是每天早上七点以root用户身份执行此Python脚本
如果没有收到邮件,那极有可能是收件人邮箱将邮件判断为了垃圾邮件,邮件接收者得手动将发送者邮箱账号设置为白名单
设置邮箱白名单的方法可百度
想尝试的朋友赶紧行动起来