使用python获取天气

35 min read
#教育机构 :马士兵教育
#讲    师:杨淑娟
#开发时间:2020/3/26 15:56
#爬虫程序 (1)发请求  requests模块发请求    (浏览器使用地址栏发请求)
                    #明确请求方式,才知道需要调用requests中的哪个方法  get请求-->get方法, post请求-->post方法

            #requests模块为第三方库提供,需要安装, 安装方式  pip install requests
#导入
import  requests  #向爬取网站服务器发送请求
from  bs4 import BeautifulSoup #解析
import  email  #用于构件邮件的包
from email.mime.text import MIMEText #说明发送的邮件内容为纯文本
from email.header import  Header #用于构建邮件的主题
import smtplib #用于发送电子邮件
def get_weather():
    # (1)发送请求
    url = 'http://www.weather.com.cn/weather/101010100.shtml'  # 平时写在浏览器地址栏中的内容
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'}
    resp = requests.get(url, headers=headers)  # 向服务器发送请求-->得到响应结果
    # print(resp.status_code) #输出响应状态码,如果为200说明访问成功
    # print(resp.request.headers)
    resp.encoding = 'utf-8'  # 设置响应编码格式
    # print(resp.text) #查看响应回来的数据
    # (2)解析数据 使用到BeautifulSoup  第三方提供,需要安装  pip install BeautifulSoup4  (将str类型转成BeautifulSoup类型)
    # print(type(resp.text)) #查看响应数据的类型<class 'str'>

    bs = BeautifulSoup(resp.text, 'html.parser')  # 'html.parser' --》html解析器
    # print(type(bs)) #<class 'bs4.BeautifulSoup'>因为只有知道了数据类型,才知道使用哪些方法
    date_tag = bs.find('h1')  # 从响应结果中查找h1的html标签

    # print(date_tag.text) 当前的日期
    wea_tag = bs.find(class_='wea')
    # print(wea_tag.text)
    tem_tag = bs.find(class_='tem')  # 当天的度数
    # print(tem_tag.text)
    return date_tag.text,tem_tag.text,wea_tag.text

#编写一个函数用于构建邮件的内容
def create_weather():
    #调用获取从网上爬取的天气信息
    date,tem,wea=get_weather() #将元组中的内容赋值给三个变量
    #构建要发送邮件的内容 邮件的正文'亲爱的,'+date+tem+wea,  类型'plain'纯文本 ,字符编码为utf-8
    msg=MIMEText('亲爱的,'+date+tem+wea,'plain','utf-8')
    #构建邮件头 (主题)
    msg['Subject']=Header('今日天气预报','utf-8')
    return msg

#发送电子邮件
def send_message():
    from_addr=input('请输入发件人邮箱名:')
    pwd=input('请输入密码:') #授权码而非邮箱密码
    to_addr=input('请输入接收人邮箱')
    #连接邮箱服务提供商的服务器
    stmp=smtplib.SMTP()  #SMTP简单邮件
    stmp.connect('smtp.qq.com',25)
    #登录邮箱
    stmp.login(from_addr,pwd)
    #调用邮件的内容的函数
    content=create_weather()
    #发送邮件
    stmp.sendmail(from_addr,to_addr,content.as_string())

    #关闭连接
    stmp.quit()
    print('邮件发送成功')









if __name__ == '__main__':
    #print(get_weather())
    send_message()