利用python监控天气

发布时间:2019-09-26 07:23:24编辑:auto阅读(2760)

    需求:

    从天气网站抓取天气,在每天6点,检查当天是否会下雨。如果下雨,邮件提醒带伞。


    代码:

    [root@pos ~]# cat weather.py
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import requests,bs4,smtplib
    def sendMail(body):
        smtp_server = 'smtp.126.com'
        from_mail = 'pp_1990@126.com'
        mail_pass = 'xxxxxxxxxx'
        to_mail = ['50xxxxxx6@qq.com']
        from_name = 'Weather Monitor'
        subject = 'Raining Today!'
        mail = [
            "From: %s <%s>" % (from_name, from_mail),
            "To: %s" % ','.join(to_mail),
            "Subject: %s" % subject,
            "",
            body
            ]
        msg = '\n'.join(mail)
        try:
            s = smtplib.SMTP_SSL('smtp.126.com',465)
            s.login(from_mail, mail_pass)
            s.sendmail(from_mail, to_mail, msg)
            s.quit()
        except smtplib.SMTPException as e:
            print("Error: "+e)
    if __name__ == "__main__":
        headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0'}
        url='http://www.tianqi.com/shanghai/'
        urlhtml=requests.get(url,headers=headers)
        urlhtml.raise_for_status()
        weatherhtml=bs4.BeautifulSoup(urlhtml.text[:],'html.parser')
        weather=weatherhtml.select('div li p')
        for i in range(len(weather)):
            weathnow=weather[i].getText()
            if weathnow == '有雨':
                sendMail("It's rainy today. Remember to bring your umbrella!")
                print("DONE!")

    将脚本写入计划任务,每天6点执行一次。

    计划任务可以采用Task Scheduler(windows)、launchd(OS X)、cron(linux)等系统工具。


    效果:

    blob.png


    当然,也可以采用发送短信的方式进行通知。


    扩展:

    Python之钉钉机器人推送天气预报


关键字