如何实现获取当天天气并每天定时发送未来七天天气情况到你的邮箱?
在所有python环境都配置好的情况下,如果本地没有安装所需要的模块,都需要执行安装。
pip install 库名
创建python文件,并复制下面的代码:
import requests
from bs4 import BeautifulSoup
# 引入请求数据库以及引入数据处理库
# 发送邮件
# 引入邮件服务
import smtplib
# 发送邮件库
from email.mime.text import MIMEText
from email.header import Header
# 引入定时库
import schedule
import time
# 定一个获取天气的方法
def weather_spider():
# 封装headers
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
# 定义要获取页面的变量
url = 'http://www.weather.com.cn/weather/101020100.shtml'
res = requests.get(url,headers=headers)
res.encoding = 'utf-8'
# 使用BeautifulSoup模块获取数据
bsdata = BeautifulSoup(res.text,'html.parser')
# 使用find找到对应模块数据
weather_data = bsdata.find_all(class_='sky')
# 定义一个获取数据存储的变量
content_text = ""
# 遍历获取的li
for item in weather_data:
weather_day = item.find("h1").text # 日期
weather_wea = item.find(class_="wea").text # 天气
weather_tem = item.find(class_="tem").text # 温度
content_text += '''
<tr>
<td style="border:1px solid #ddd;padding:3px 5px;">%s</td>
<td style="border:1px solid #ddd;padding:3px 5px;">%s</td>
<td style="border:1px solid #ddd;padding:3px 5px;">%s</td>
</tr>
'''%(weather_day,weather_wea,weather_tem)
# 打印测试
print(content_text)
# 接下来就是发送邮件的功能了
mailhost = "smtp.qq.com" # 163为smtp.163.com 其他的邮箱服务可以自行百度
# 实例化一个smtplib模块里的SMTP类的对象,这样就可以用他的方法和属性了
qqmail = smtplib.SMTP()
# 链接服务器,第一个为服务器地址,第二个为端口号
qqmail.connect(mailhost,25) # 25为常见端口号,其他可用端口号也可以
# 定义发件人邮箱,密码以及收件人
account = "1713445471@qq.com"
password = "phqxoahjwhpcdjag" # 密码毕竟比较私密,后期运行的时候自行填上即可
# 登录
qqmail.login(account,password)
# 定义收件人
receiver = "fans_m@163.com" # 多个收件人可用数组形式['','']
# 实例化一个MINEText邮件对象,该对象有三个参数,分别为邮件正文,文本格式和编码,咱们这里以html为例
message = MIMEText('''
<h1>上海七天天气</h1>
<table>
<thead>
<tr>
<th style="border:1px solid #ddd;padding:3px 5px;color:#fff;background:#3dcd58;">日期</th>
<th style="border:1px solid #ddd;padding:3px 5px;color:#fff;background:#3dcd58;">天气</th>
<th style="border:1px solid #ddd;padding:3px 5px;color:#fff;background:#3dcd58;">温度</th>
</tr>
</thead>
<tbody>%s</tbody>
</table>
'''%(content_text),'HTML','UTF-8')
# 定义邮件主题
subject = "定时发送上海天气"
# 实例化一个Header邮件头对象,该对象有两个参数,分别为邮件主题和编码
message['Subject'] = Header(subject,'UTF-8')
# 开始发送邮件,调用sendmail()方法,写入三个参数,分别为发件人,收件人和字符串格式的正文
try:
qqmail.sendmail(account,receiver,message.as_string())
print("发送成功")
except:
print("发送失败")
# 退出邮箱
qqmail.quit()
# 调用函数
# weather_spider()
# 测试一下看效果,别忘记密码,接收成功,接下来定时发送
# 定时任务,每2秒执行一次
schedule.every(2).seconds.do(weather_spider)
while True:
schedule.run_pending()
time.sleep(1)
# 全部完成,测试验证 完成了
当然,定时可以每隔2秒一次,也可以按照小时,天数,或者指定的时间进行发送,如下:
schedule.every(10).minutes.do(job) # 部署每10分钟执行一次job()函数的任务
schedule.every().hour.do(job) # 部署每×小时执行一次job()函数的任务
schedule.every().day.at("10:30").do(job) # 部署在每天的10:30执行job()函数的任务
schedule.every().monday.do(job) # 部署每个星期一执行job()函数的任务
schedule.every().wednesday.at("13:15").do(job) # 部署每周三的13:15执行函数的任务