需求:
从天气网站抓取天气, 在每天 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 b')
- 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) 等系统工具
效果:
当然, 也可以采用发送短信的方式进行通知
来源: http://www.bubuko.com/infodetail-2501077.html