千家信息网

如何使用python实现定时报天气

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下如何使用python实现定时报天气,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一.分析爬取目标这里就不
千家信息网最后更新 2026年11月01日如何使用python实现定时报天气

小编给大家分享一下如何使用python实现定时报天气,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一.分析爬取目标

这里就不爬取股票的信息,我来爬一个天气预报的信息,然后实现每天定时发送。打开下面的链接就能跳转到中国气象网
http://www.weather.com.cnnn/


点击温度那个位置就可以进入下面的图


我们可以看到7天的天气和8-15天的天气,再往后对我们来说就没必要了。我们查看七日的天气预报,直接爬11日的天气,鼠标右键->检查->Network->刷新网页->查看列表第一个,再点击preview


可以看到数据在HTML里面,然后回到element


可以发现,温度数据放在

之下。"多云"所在的位置是

晴

。

import requestsheaders = {    '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'}# 封装headers#这里对应的是我选的城市,可以换自己所在城市url = 'http://www.weather.com.cn/weather/101010100.shtml'# 把URL链接赋值到变量url上res = requests.get(url, headers=headers)# 发送requests请求,并把响应的内容赋值到变量res中。print(res.text)# 打印出res对象的网页源代码print(res.status_code)# 检查响应状态是否正常

看结果可以看到是响应是正常的,但是出现了乱码。但是莫慌。加上一句res.encoding='utf-8'就行了。


接下来就可以写完整的爬取信息的代码了

import requestsfrom bs4 import BeautifulSoupheaders={'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'}#封装headersurl='http://www.weather.com.cn/weather/101010100.shtml'#把URL链接赋值到变量url上res=requests.get(url,headers=headers)#发送requests请求,并把响应的内容赋值到变量res中res.encoding='utf-8'bsdata=BeautifulSoup(res.text,'html.parser')#使用bs模块解析获取到的数据data_temperature= bsdata.find(class_='tem')#使用find()取出天气的温度数据data_weather= bsdata.find(class_='wea')#使用find()取出天气的文字描述print(data_temperature.text)#取出变量data_temperature中的字符串内容,并打印print(data_weather.text)#取出变量data_weather中的字符串内容,并打印

可以成功的得到需要的数据。

其实最难的不是爬虫,爬这种信息新手应该都会,接下里才是重头戏。

二.信息的发送

如果我们想要实现发送邮件,这里以qq邮件为例要经过以下的步骤:

  • 连接邮件服务器

  • 使用邮箱账号密码登录

  • 填写收件人,主题,正文等

  • 发送邮件

所以连接服务器要用到用到smtplib库,填写主题和撰写正文,需要用到email库(python真的是yyds)

1.连接服务器

SMTP代表简单邮件传输协议,相当于一种计算机之间发邮件的约定

smtplib是不需要安装的,smtplib是python的一个内置库,有兴趣的小伙伴可以看看官方文档

看下面的代码

import smtplibmailhost='smtp.qq.com'#把qq邮箱的服务器地址赋值到变量mailhost上,地址需要是字符串的格式。qqmail = smtplib.SMTP()#实例化一个smtplib模块里的SMTP类的对象,这样就可以SMTP对象的方法和属性了qqmail.connect(mailhost,25)#连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号

**mailhost='smtp.qq.com'**这句是qq邮箱的服务器地址,这个是可以查得到的

用SMTP对象的connect()方法连接服务器,第一个参数是获取到的服务器地址,第二个参数是SMTP端口号--25。端口号的选择不是唯一的,但是25是一个最简单、最基础的端口号,所以我们填25。

2.获取账号和密码

此密码非彼密码,这个密码需要我们去到这里获取:https://mail.qq.com/,登录你的邮箱。然后点击位于顶部的【设置】按钮,选择【账户设置】。


下拉到这个位置


点击开启第一个,然后得到授权码,如果以前获取过但是忘了,就需要发送短信重新获取,这个码一定不要外漏!!!

import smtplibmailhost='smtp.qq.com'#把qq邮箱的服务器地址赋值到变量mailhost上qqmail = smtplib.SMTP()#实例化一个smtplib模块里的SMTP类的对象,这样就可以SMTP对象的方法和属性了qqmail.connect(mailhost,25)#连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号。sender = input('请输入你的邮箱:')#获取邮箱账号password = input('请输入你的密码:')#获取邮箱密码qqmail.login(sender,password)#登录邮箱,第一个参数为邮箱账号,第二个参数为邮箱密码receiver=input('请输入收件人的邮箱:')#获取收件人的邮箱

所填密码就是刚才获取的授权码

3.填写主题和撰写正文

在这里就需要用到email库。

from email.mime.text import MIMETextfrom email.header import Headercontent=input('请输入邮件正文:')#输入你的邮件正文message = MIMEText(content, 'plain', 'utf-8')#实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码subject = input('请输入你的邮件主题:')#用input()获取邮件主题  message['Subject'] = Header(subject, 'utf-8')

我们还需要引入了email库中的MIMEText模块和Header模块
最后一行代码:在等号的右边,是实例化了一个Header邮件头对象,该对象需要写入两个参数,分别是邮件主题和编码,然后赋值给等号左边的变量message['Subject'],message['Subject']就代表着根据MIMEText类里面的Subject的属性名取到该属性

代码有注释还不明白的话可以去看看文档,

4.发送邮件和退出邮箱

将前面的代码整合以下

from email.mime.text import MIMETextfrom email.header import Header#引入Header和MIMEText模块content=input('请输入邮件正文:')#输入你的邮件正文message = MIMEText(content, 'plain', 'utf-8')#实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码subject = input('请输入你的邮件主题:')#用input()获取邮件主题message['Subject'] = Header(subject, 'utf-8')qqmail.sendmail(sender, receiver, message.as_string())qqmail.quit()#退出邮箱

sendmail() 发送邮件,括号里面有三个参数,第1个是发件人的邮箱地址,第2个是收件人的邮箱地址,第3个是正文,但必须是字符串格式,所以用as_string()函数转换了一下。

但是我们希望发送成功后能显示"邮件发送成功",失败的时候能提示我们"邮件发送失败",可以使用try语句来实现。

try:    qqmail.sendmail(sender, receiver, message.as_string())    print ('邮件发送成功')except:    print ('邮件发送失败')qqmail.quit()

三.定时发送

关于时间,其实Python有两个内置的标准库--time和datetime,但是我们不用,诶,就是玩,我们可以用第三方库schedule其实是有原因的:对于我们需要的定时功能,time和datetime当然能实现,但操作逻辑会相对复杂;而schedule就是可以直接解决定时功能,代码比较简单,这是我们选择schedule的原因。
官方文档链接:https://pypi.org/project/schedule/
根据文档我们做一个每3秒运行一次的程序

import scheduleimport time#引入schedule和time模块def job():    print("Working in progress...")#定义一个叫job的函数,函数的功能是打印'I'm working...'schedule.every(3).seconds.do(job)        while True:    schedule.run_pending()    time.sleep(1)

也可以设置在某个时间发送,用法很多,这里就不展开。最后把这些代码全部合并整合一下,下面看效果

四.效果


这里我定的下午三点四十六,然后发送成功,我打开我的邮箱确实能收到


这个功能我放在服务器上用了很久了,爬一些平时自己必看的信息,然后发送,减少了自己被其他东西吸引注意力的几率。

以上是"如何使用python实现定时报天气"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

邮件 邮箱 服务器 服务 参数 对象 正文 天气 变量 地址 密码 输入 主题 代码 模块 内容 成功 信息 口号 实例 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 博彦科技互联网金融 互联网科技活动banner 科技金融是不是互联网金融 深圳互联网科技公司 西安互联网科技 互联网与新科技 苏州互联网科技贷款公司 壕鑫互联网络科技 上海万想互联网科技 成都仁贤领冠互联网科技有限公司 华脉科技工业互联网产品 福建科技产业互联网发展 爱医互联网络科技 华中科技大学互联网的牛人 滨湖区互联网智能科技产品有哪些 互联网科技年终奖 云鲸互联网络科技有限公司 互联网科技企业商标注意事项 科技互联网经济论坛 互联网科技的前景 喔噻互联网科技有限公司 互联网 卓越科技 长亮科技 互联网金融 海南科技产业互联网平台 创业天下互联网科技有限公司 南平创想时代互联网科技有限公司 四川慕妮娅互联网科技有限公司 江苏互联网智能科技产品出厂价 米泉互联网科技专业怎么样 杭州科技互联网公司有哪些
0