python 实现自动定时爬取天气预报发送邮件
自动定时爬取天气预报发送邮件
【定时】+【发邮件】+【爬虫】
#爬取天气,需要用到爬虫里面requests模块
#引用模块
import smtplib #发邮件
from email.mime.text import MIMEText #用于构建内容文本
from email.header import Header #用于构建邮件头
import schedule #定时模块
import time #时间模块
import requests #请求网页信息模块
from bs4 import BeautifulSoup #用来解析和提取网页中的数据的模块
# 爬取天气
def weather(): #定义函数
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (like Gecko) Chrome/75.0.3770.142 Safari/537.36'}
r=requests.get('http://www.weather.com.cn/weather/101281601.shtml',headers=headers) #跟网站要数据赋值给r
r.encoding='utf-8' #重申r的编码为'utf-8'
bs=BeautifulSoup(r.text,'html.parser') #解码,'html.parser'是解析器
a=bs.find('li',class_="sky skyid lv1") #提取数据
b=a.find('h1').text
c=a.find('p').text
d=a.find('p',class_="tem").text[-7:]
return'今天%s\n天气:%s\n温度:%s' % (b,c,d)
# 发送邮件
def Email(weathers): #定义函数Email(),一旦调用将会执行下面的功能,参数为weathers
#服务器,端口
host='smtp.qq.com'
port=465
#我方账户,授权码
username='************@qq.com'
password='***********'
#对方账户
to_addr=['******@live.com','*******@qq.com'] #添加多个账户采用列表形式
#要发送的内容
moment=weathers
#构建纯文本的邮件内容
msg = MIMEText(moment,'plain','utf-8')
#构建邮件头
msg['From'] = Header('丁丁') #2.from来自哪里,指发件人的名称或地址
msg['To'] = Header('我的小可爱') #3.to发件人邮箱地址
msg['Subject'] = Header('天气预报') #4.主题
try:
# 开启发信服务
server = smtplib.SMTP_SSL(host)
server.connect(host, port)
# 登录发信邮箱
server.login(username, password)
# 发送邮件
server.sendmail(username, to_addr, msg.as_string())
# 关闭服务器
server.quit()
print('发送成功')
except:
print('发送失败')
# 确定任务
def job():
weathers=weather() #调用函数weather(),返回的值赋值给weathers
Email(weathers) #调用函数Email(weathers),参数为weathers
# 定时
schedule.every().day.at("7:30").do(job) #每天早上7点半执行一次
# 监听定时任务
while True:
schedule.run_pending() #检查上面的任务部署情况,如果任务已经准备就绪,就去启动执行。
time.sleep(1)
#让程序按1秒来检查