Python爬虫获取天气预报并发到指定人的QQ邮箱
爬取天气预报并发到指定人的QQ邮箱(使用新浪邮箱)
天气预报: https://tianqi.so.com/weather/
# coding: utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header import requests from bs4 import BeautifulSoup import prettytable as pt def get_Data(url): data_list = [] response = requests.get(url) html_doc = response.text soup = BeautifulSoup(html_doc, 'lxml') # 将html代码自动补全,并按html代码格式返回 wendu = soup.find('div', class_='temperature').get_text() tianqi = soup.find('div', class_='weather-icon-wrap').get_text() data_list.append("现在的温度:%s\n现在天气情况:%s" % (wendu, tianqi)) list = soup.find_all('ul', class_='weather-columns') for item in list: data_list.append(item.get_text()) print("列表数据:",data_list) a = 1 tb = pt.PrettyTable() #创建PrettyTable对象 tb.field_names = ["日期","天气","详情"] for item in data_list: # print(a) if a != 1: # print(item.strip()) # print(item.strip().split()[0]+item.strip().split()[1],item.strip().split()[2],item.strip().split()[3]) tb.add_row([item.strip().split()[0]+item.strip().split()[1],item.strip().split()[2],item.strip().split()[3]]) else: print(item.strip()) a+=1 print(tb) return tb def send_mail(msg,receiver): # 收件人 receiver = receiver mail_title = '天气预报' mail_body = str(msg) # 创建一个实例 message = MIMEText(mail_body, 'plain', 'utf-8') # 邮件正文 # (plain表示mail_body的内容直接显示,也可以用text,则mail_body的内容在正文中以文本的形式显示,需要下载) message['From'] = sender # 邮件上显示的发件人 message['To'] = receiver # 邮件上显示的收件人 message['Subject'] = Header(mail_title, 'utf-8') # 邮件主题 smtp = smtplib.SMTP() # 创建一个连接 smtp.connect(smtpserver) # 连接发送邮件的服务器 smtp.login(username, password) # 登录服务器 smtp.sendmail(sender, receiver, message.as_string()) # 填入邮件的相关信息并发送 smtp.quit() if __name__ == '__main__': sender = '发送者邮箱' # 发件人邮箱的SMTP服务器(即sender的SMTP服务器) smtpserver = 'smtp.sina.com' # 发件人邮箱的用户名和授权码(不是登陆邮箱的密码) username = '发送者登陆邮箱' password = '密码' # (83xxxx202@qq.com邮箱的授权码或者密码) url_list = ['url1','url2'] receiver_list =['接收者邮箱1','接收者邮箱2'] for i in range(len(url_list)): tb = get_Data(url_list[i]) #获得每一个用户的数据 send_mail(tb,receiver_list[i]) #发送邮件
运行结果:
列表数据: ['现在的温度:19\n现在天气情况:晴', '今天 (05-13) 多云\n 16/24℃轻度北风 3-5级', '明天 (05-14) 小雨转中雨\n 18/24℃良东南风 微风', '周三 (05-15) 小雨转多云\n 19/26℃优北风 微风', '周四 (05-16) 多云\n 20/30℃优东北风 微风', '周五 (05-17) 多云\n 20/29℃良东风 微风', '周六 (05-18) 小雨\n 19/31℃优东风 微风', '周日 (05-19) 小雨转多云\n 12/27℃优北风 5-6级'] 现在的温度:19 现在天气情况:晴 +-------------+------------+----------------+ | 日期 | 天气 | 详情 | +-------------+------------+----------------+ | 今天(05-13) | 多云 | 16/24℃轻度北风 | | 明天(05-14) | 小雨转中雨 | 18/24℃良东南风 | | 周三(05-15) | 小雨转多云 | 19/26℃优北风 | | 周四(05-16) | 多云 | 20/30℃优东北风 | | 周五(05-17) | 多云 | 20/29℃良东风 | | 周六(05-18) | 小雨 | 19/31℃优东风 | | 周日(05-19) | 小雨转多云 | 12/27℃优北风 | +-------------+------------+----------------+ 列表数据: ['现在的温度:21\n现在天气情况:多云', '今天 (05-13) 晴转小雨\n 17/25℃持续无风向 微风', '明天 (05-14) 多云转小雨\n 17/25℃持续无风向 微风', '周三 (05-15) 小雨转晴\n 19/28℃持续无风向 微风', '周四 (05-16) 晴转小雨\n 20/28℃持续无风向 微风', '周五 (05-17) 多云转阴\n 21/28℃持续无风向 微风', '周六 (05-18) 阵雨\n 18/28℃持续无风向 微风', '周日 (05-19) 多云\n 17/27℃持续无风向 微风'] 现在的温度:21 现在天气情况:多云 +-------------+------------+------------------+ | 日期 | 天气 | 详情 | +-------------+------------+------------------+ | 今天(05-13) | 晴转小雨 | 17/25℃持续无风向 | | 明天(05-14) | 多云转小雨 | 17/25℃持续无风向 | | 周三(05-15) | 小雨转晴 | 19/28℃持续无风向 | | 周四(05-16) | 晴转小雨 | 20/28℃持续无风向 | | 周五(05-17) | 多云转阴 | 21/28℃持续无风向 | | 周六(05-18) | 阵雨 | 18/28℃持续无风向 | | 周日(05-19) | 多云 | 17/27℃持续无风向 | +-------------+------------+------------------+
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?