上篇文章自动发送邮件,python几行代码来搞定!我们说到如何用python来实现自动发送邮件。这篇文章我们就来谈谈如何获取天气数据,并定时将天气数据发送到指定的邮箱中?
太阳
天气的获取分为两种:
一种是通过免费的api接口,这有次数限制,一般每天调用1000次,但对于个人使用是完全够的。另一种是通过python爬取相关天气预报网页的内容,从里面提取相关的信息。由于之前没有给大家介绍过相关爬虫的知识,所以这里采用第一种方法。以后再陆续介绍爬虫怎么去获取天气预报信息。
1.Requests库
这里我们用到一个新的库--requests,它是一个http库,简单来说就是用来向服务器发起请求的库。它在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举地完成浏览器可有的任何操作。
使用它最重要的一个方法就是get方法,它能获取到所请求页面的html信息。
例子
请求某个页面详细的html信息,就可以按照图片上的代码这么写,输出的就是html信息。爬虫就是在这个基础上,根据某些规则提取html中的特定信息。
2.获取天气信息
这里采用api接口的方式获取。免费的天气api网上比较多,随便注册一个就好,然后获得你自己应用的key,我这里以和风天气为例。
1.获取某地实时的天气信息
获取北京天气
在url中?之前的是接口地址,location写要查询地址名称的拼音,后面的key为自己在平台上注册申请的key值。然后用request库进行请求。
返回信息
返回来的信息如图所示,就是一个json字符串,里面包含北京经纬度,各种天气情况等信息。接下来再用json对其进行解析,提取表示天气好坏的字段,比如cond_txt
2.获取某地预测天气信息
获取预测的天气预报和获取实时信息方法一样,只不过请求访问的接口变了。这里利用json对数据进行解析,然后遍历出预测天数的天气情况。
代码及输出结果
只提取里面的date,cond_txt_d,tmp_max,tmp_min,sr,ss等字段的值,并输出。然后可以看到输出预测北京三天的天气情况。
3.发送到邮箱
拿到天气信息后,接下来就是利用smtplib库将信息发送到邮箱,这个库在上一篇文章中已经介绍过,这里我们直接拿来使。
代码
这里将获取的天气信息封装成一个字符串message,然后声明一个简单MIMEText对象(不带附件),建立SMTP连接发送邮件。
效果
结果如图所示,这样天气信息就出现在你的邮箱中。
4.解决定时发送问题
在前三步解决了点击程序就获取一次天气信息并发送邮件的功能,那怎么让程序一直运行,并在规定时间发送邮件呢?
在这里我们用到apscheduler库,它提供了专用的调度器和调度服务的基础模块。简单说它就是可以实现 windows 计划任务程序等类似的功能。
还是以例子来说明:
定时输出
这段代码实现的功能非常简单,就是隔3秒就输出当前时间。函数tick就是我们每3秒要执行的方法。这里用BlockingScheduler调度器来生成一个调度器对象,并将要执行的函数tick与间隔执行时间添加到调度器对象当中。
回归到我们主题上来,按照刚刚这个例子,我们只需将tick函数替换为我们自己的发送邮件的函数即可,并根据自己的需求设置时间。
代码
这里send_message就是发送邮件的函数,cron表示执行定时cron任务,day_of_week表示在星期几执行该任务该方法,0-6就是星期一到星期天。hour,minute表示任务在一天中执行的时间,这里设为8:00,也就是每天八点就自动给你发送天气预报邮件。
到这里简单的功能就都实现完成,要是想获取全部代码的小伙伴可以在下方留言!
谢谢大家阅读
感兴趣的小伙伴可以关注我,欢迎留言讨论。转载请注明出处(百家号:戏说编程)