定时爬取气象信息发邮件

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()#启动定时

你可能感兴趣的:(定时爬取气象信息发邮件)