import requests
from bs4import BeautifulSoup
import smtplib#smtplib是python的一个内置库,所以不需要用pip安装
from email.mime.textimport MIMEText
from email.headerimport Header
import schedule
def get_weather():
headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'}
url='http://www.weather.com.cn/weather/101020100.shtml'
response=requests.get(url=url,headers=headers)
if response.encoding!='utf-8':
response.encoding='utf-8'#response.text的打印结果时我们会发现会有乱码,只要用 response.encoding转换一下编码就可以了
if res.status_code:
soup=BeautifulSoup(response.text,'html.parser')
temperature=soup.find(class_='tem').text.replace(' ','').replace('\n','')
weather=soup.find(class_='wea').text.replace(' ','').replace('\n','')
return temperature,weather
def send_mail(temperature,weather):
mail_host='smtp.qq.com'
qqmail=smtplib.SMTP()#实例化一个smtplib模块里的SMTP类的对象,这样就可以SMTP对象的方法和属性了
qqmail.connect(mail_host,25)#连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号
sender='账户@qq.com'
passward='授权码'
qqmail.login(sender,passward)
receiver='邮箱'
content='亲爱的,今天的天气是:+temperature+ ","+ weather)'
message=MIMEText(content,'plain','utf-8')#实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码
Subject='天气日报'
message['Subject']=Header('Subject','utf-8')#在等号的右边,是实例化了一个Header邮件头对象,该对象需要写入两个参数,
# 分别是邮件主题和编码,然后赋值给等号左边的变量message['Subject']
try:
qqmail.sendmail(sender,receiver,message.as_string())#发送邮件,调用了sendmail()方法,写入三个参数,分别是发件人,收件人,和字符串格式的正文
print('发送成功')
except:
print('发送失败')
qqmail.quit()
def job():#定义一个任务
print('开始一次发送任务')
temperature,weather=get_weather()#获取数据
send_mail(temperature,weather)#发送邮件
schedule.every().day.at('12:01').do(job)#定时设置
while True:
schedule.run_pending()#启动定时