使用Python制作天气查询系统

简介: 使用Python制作天气查询系统

 背景

某天下班淋雨成了落汤鸡,发了个朋友圈感慨一下啊,然后......

夜深人静之时,突然收到了来自学妹的Py文件,运行之后发现事情并不简单(如下图):

image.png

这是暗示我...下次出门给她带把伞?不管那么多,作为一个程序猿,遇到程序先拆解一下。

工具

爬虫:requests

解析:re

UI:tkinter

代码解读

想要做一个获取天气预报的小程序,第一步要做的就是能够进行天气预报的爬取,这里通过城市名称匹配百度天气的URL进行爬取,并通过正则的方式进行解析,最终以字典的形式返回结果。

classWeather(object):
def__init__(self):
passdefcrawl(self, key):
url='http://weathernew.pae.baidu.com/weathernew/pc?query='+key+'天气&srcid=4982&city_name='+key+'&province_name='+key# 设置请求头headers= {
'user-agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'Referer': 'https://googleads.g.doubleclick.net/'        }
# 页面HTMLres=requests.get(url, headers=headers).text# 时间time=re.search(r'\{\"update_time\":\"(.+?)\"', res).group(1)
# 天气weather=re.search(r'\"weather\"\:\"(.+?)\"', res).group(1)
weather=weather.encode('utf-8').decode("unicode-escape")
# 气温weather_l=re.search(r'temperature_night\"\:\"(.+?)\"', res).group(1)
weather_h=re.search(r'temperature_day\"\:\"(.+?)\"', res).group(1)
# 风力wind_now=re.search(r'\"wind_power_day\"\:\"(.+?)\"', res).group(1)
wind_now=wind_now.encode('utf-8').decode("unicode-escape")
wind_name=re.search(r'\"wind_direction_day\"\:\"(.+?)\"',
res).group(1)
wind_name=wind_name.encode('utf-8').decode("unicode-escape")
wind=wind_name+wind_now# 贴示desc=re.search(r'\"desc\"\:\"(.+?)\"', res).group(1)
desc=desc.encode('utf-8').decode("unicode-escape")
# 结果生dic= {
'城市': key,
'更新时间': time,
'天气': weather,
'温度': weather_l+'-'+weather_h+'摄氏度',
'风力': wind,
'贴示': desc,
        }
returndic

image.gif

写好了爬取天气预报的代码之后,下面就可以写一个UI来和输入/爬取的内容进行交互的,写UI的方式大同小异,代码如下:

classWeather_UI(object):
def__init__(self):
self.window=Tk()
self.weather=Weather()
self.window.title(u'天气预报')
# 设置窗口大小和位置self.window.geometry('310x370')
# 创建一个文本框self.result_text0=Label(self.window, text=u'学长所在城市:\n要写中文呦')
self.result_text0.place(x=10, y=5, height=130)
self.result_text0.bind('提示')
self.result_text1=Text(self.window, background='#ccc')
self.result_text1.place(x=140, y=10, width=155, height=155)
self.result_text1.bind("<Key-Return>", self.submit)
# 创建一个按钮# 为按钮添加事件self.submit_btn=Button(self.window,
text=u'获取天气',
command=self.submit)
self.submit_btn.place(x=170, y=165, width=70, height=25)
self.submit_btn2=Button(self.window, text=u'清空', command=self.clean)
self.submit_btn2.place(x=250, y=165, width=35, height=25)
# 标题self.title_label=Label(self.window, text=u'今日天气:')
self.title_label.place(x=10, y=165)
# 结果self.result_text=Text(self.window, background='#ccc')
self.result_text.place(x=10, y=190, width=285, height=165)
defsubmit(self):
# 从输入框获取用户输入的值content=self.result_text1.get(0.0, END).strip().replace("\n", " ")
# 把城市信息传到爬虫函数中result=self.weather.crawl(content)
# 将结果显示在窗口中的文本框中fork, vinresult.items():
self.result_text.insert(END, k+':'+v)
self.result_text.insert(END, '\n')
self.result_text.insert(END, '\n')
# 清空文本域中的内容defclean(self):
self.result_text1.delete(0.0, END)
self.result_text.delete(0.0, END)
defrun(self):
self.window.mainloop()

image.gif

运行结果如下:

image.png

完整代码

importjsonimportrequestsimportreimporttkinterasTkfromtkinterimportTk, Button, Entry, Label, Text, ENDclassWeather(object):
def__init__(self):
passdefcrawl(self, key):
url='http://weathernew.pae.baidu.com/weathernew/pc?query='+key+'天气&srcid=4982&city_name='+key+'&province_name='+key# 设置请求头headers= {
'user-agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'Referer': 'https://googleads.g.doubleclick.net/'        }
# 页面HTMLres=requests.get(url, headers=headers).text# 时间time=re.search(r'\{\"update_time\":\"(.+?)\"', res).group(1)
# 天气weather=re.search(r'\"weather\"\:\"(.+?)\"', res).group(1)
weather=weather.encode('utf-8').decode("unicode-escape")
# 气温weather_l=re.search(r'temperature_night\"\:\"(.+?)\"', res).group(1)
weather_h=re.search(r'temperature_day\"\:\"(.+?)\"', res).group(1)
# 风力wind_now=re.search(r'\"wind_power_day\"\:\"(.+?)\"', res).group(1)
wind_now=wind_now.encode('utf-8').decode("unicode-escape")
wind_name=re.search(r'\"wind_direction_day\"\:\"(.+?)\"',
res).group(1)
wind_name=wind_name.encode('utf-8').decode("unicode-escape")
wind=wind_name+wind_now# 贴示desc=re.search(r'\"desc\"\:\"(.+?)\"', res).group(1)
desc=desc.encode('utf-8').decode("unicode-escape")
# 结果生dic= {
'城市': key,
'更新时间': time,
'天气': weather,
'温度': weather_l+'-'+weather_h+'摄氏度',
'风力': wind,
'贴示': desc,
        }
returndicclassWeather_UI(object):
def__init__(self):
self.window=Tk()
self.weather=Weather()
self.window.title(u'天气预报')
# 设置窗口大小和位置self.window.geometry('310x370')
# 创建一个文本框self.result_text0=Label(self.window, text=u'学长所在城市:\n要写中文呦')
self.result_text0.place(x=10, y=5, height=130)
self.result_text0.bind('提示')
self.result_text1=Text(self.window, background='#ccc')
self.result_text1.place(x=140, y=10, width=155, height=155)
self.result_text1.bind("<Key-Return>", self.submit)
# 创建一个按钮# 为按钮添加事件self.submit_btn=Button(self.window,
text=u'获取天气',
command=self.submit)
self.submit_btn.place(x=170, y=165, width=70, height=25)
self.submit_btn2=Button(self.window, text=u'清空', command=self.clean)
self.submit_btn2.place(x=250, y=165, width=35, height=25)
# 标题self.title_label=Label(self.window, text=u'今日天气:')
self.title_label.place(x=10, y=165)
# 结果self.result_text=Text(self.window, background='#ccc')
self.result_text.place(x=10, y=190, width=285, height=165)
defsubmit(self):
# 从输入框获取用户输入的值content=self.result_text1.get(0.0, END).strip().replace("\n", " ")
# 把城市信息传到爬虫函数中result=self.weather.crawl(content)
# 将结果显示在窗口中的文本框中fork, vinresult.items():
self.result_text.insert(END, k+':'+v)
self.result_text.insert(END, '\n')
self.result_text.insert(END, '\n')
# 清空文本域中的内容defclean(self):
self.result_text1.delete(0.0, END)
self.result_text.delete(0.0, END)
defrun(self):
self.window.mainloop()
A=Weather_UI()
A.run()

image.gif


相关文章
|
24天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
87 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
27天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
1月前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
127 66
|
21天前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习果蔬识别系统实现
本项目基于Python和TensorFlow,使用ResNet卷积神经网络模型,对12种常见果蔬(如土豆、苹果等)的图像数据集进行训练,构建了一个高精度的果蔬识别系统。系统通过Django框架搭建Web端可视化界面,用户可上传图片并自动识别果蔬种类。该项目旨在提高农业生产效率,广泛应用于食品安全、智能农业等领域。CNN凭借其强大的特征提取能力,在图像分类任务中表现出色,为实现高效的自动化果蔬识别提供了技术支持。
基于Python深度学习果蔬识别系统实现
|
25天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
27 3
|
5月前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的电影订票管理系统
该项目是基于Python+Vue开发的电影订票管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的电影订票管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
40 1
|
5月前
|
数据采集 数据可视化 关系型数据库
【优秀python web设计】基于Python flask的猫眼电影可视化系统,可视化用echart,前端Layui,数据库用MySQL,包括爬虫
本文介绍了一个基于Python Flask框架、MySQL数据库和Layui前端框架的猫眼电影数据采集分析与可视化系统,该系统通过爬虫技术采集电影数据,利用数据分析库进行处理,并使用Echart进行数据的可视化展示,以提供全面、准确的电影市场分析结果。
181 4
|
5月前
|
存储 数据采集 数据可视化
基于Python flask+MySQL+echart的电影数据分析可视化系统
该博客文章介绍了一个基于Python Flask框架、MySQL数据库和ECharts库构建的电影数据分析可视化系统,系统功能包括猫眼电影数据的爬取、存储、展示以及电影评价词云图的生成。
274 1
|
5月前
|
数据采集 存储 数据可视化
基于Python flask的猫眼电影票房数据分析可视化系统,可以定制可视化
本文介绍了一个基于Python Flask框架开发的猫眼电影票房数据分析可视化系统,该系统集成了数据爬取、存储处理、可视化展示和用户交互功能,使用户能够直观地分析和展示电影票房数据,具有高度定制性。
193 0
基于Python flask的猫眼电影票房数据分析可视化系统,可以定制可视化
|
5月前
|
机器学习/深度学习 算法 数据可视化
基于Python flask的豆瓣电影数据分析可视化系统,功能多,LSTM算法+注意力机制实现情感分析,准确率高达85%
本文介绍了一个基于Python Flask框架的豆瓣电影数据分析可视化系统,该系统集成了LSTM算法和注意力机制进行情感分析,准确率高达85%,提供了多样化的数据分析和情感识别功能,旨在帮助用户深入理解电影市场和观众喜好。
194 0

热门文章

最新文章