python小程序基于Jupyter实现天气查询的方法


Posted in Python onMarch 27, 2020

天气查询python小程序第0步:导入工具库第一步:生成查询天气的url链接第二步:访问url链接,解析服务器返回的json数据,变成python的字典数据第三步:对字典进行索引,获取气温、风速、风向等天气信息第四步:遍历forecast列表中的五个元素,打印天气信息完整Python代码
本案例是一个非常有趣的python小程序,调用网络API查询指定城市的天气,并打印输出天气信息。

你将学到以下技能:

向网络API发起请求,解析和处理服务器返回的json数据,可以迁移到各种各样的API中,如PM2.5查询,道路拥堵查询,自然灾害查询等。
python字典数据类型的常用操作
以下的代码运行在jupyter notebook的开发环境中,这是python数据分析、机器学习、人工智能开发最常用的开发界面,因为可以非常方便的撰写博客、插入图片和数学公式,并输出代码运行的中间结果,强烈建议你学习如何使用jupyter notebook。

第0步:导入工具库

import urllib.request
import gzip

第一步:生成查询天气的url链接

city_name = '上海'
# 将城市的中文名字编码成utf-8字符
urllib.parse.quote(city_name)
# 将编码后的城市名拼接在原始链接的后面
url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + urllib.parse.quote(city_name)

python小程序基于Jupyter实现天气查询的方法

第二步:访问url链接,解析服务器返回的json数据,变成python的字典数据

weather_data = urllib.request.urlopen(url).read()
# 访问url链接,获取字节串数据
weather_data

python小程序基于Jupyter实现天气查询的方法

# 将字节串解码为unicode编码
weather_data = gzip.decompress(weather_data)
weather_data

python小程序基于Jupyter实现天气查询的方法

# 将unicode编码解码为utf-8编码,显示中文
weather_data = weather_data.decode('utf-8')
weather_data

python小程序基于Jupyter实现天气查询的方法

# 将字符串两端的引号去掉,变成python中的字典数据
weather_dict = eval(weather_data)
weather_dict

python小程序基于Jupyter实现天气查询的方法

type(weather_dict)

第三步:对字典进行索引,获取气温、风速、风向等天气信息

weather_dict

python小程序基于Jupyter实现天气查询的方法

weather_dict['data']['yesterday']['high']
print('您查询的城市:',weather_dict['data']['city'])
print('--------------------------')
print('今天的天气')
print('温度',weather_dict['data']['wendu'])
print('感冒指数',weather_dict['data']['ganmao'])
print('--------------------------')
print('昨天的天气')
print('昨天:',weather_dict['data']['yesterday']['date'])
print('天气:',weather_dict['data']['yesterday']['type'])
print('最高气温:',weather_dict['data']['yesterday']['high'])
print('最低气温:',weather_dict['data']['yesterday']['low'])
print('风向:',weather_dict['data']['yesterday']['fx'])
print('风力:',weather_dict['data']['yesterday']['fl'][-5:-3])
print('--------------------------')

python小程序基于Jupyter实现天气查询的方法

第四步:遍历forecast列表中的五个元素,打印天气信息

weather_dict[‘data'][‘forecast']是一个包含五个元素的列表,每一个元素都是一个字典。

weather_dict['data']['forecast']

python小程序基于Jupyter实现天气查询的方法

for each in weather_dict['data']['forecast']:
  print('日期',each['date'])
  print('天气',each['type'])
  print(each['high'])
  print(each['low'])
  print('风向',each['fengxiang'])
  print('风力:',each['fengli'][-5:-3])
  print('--------------------------')

python小程序基于Jupyter实现天气查询的方法

完整Python代码

# 导入工具库
import urllib.request
import gzip

## 第一步:生成查询天气的url链接
city_name = input('请输入要查询的城市名称:')

# 将城市的中文名字编码成utf-8字符
urllib.parse.quote(city_name)
# 生成完整url链接
url = 'http://wthrcdn.etouch.cn/weather_mini?city='+urllib.parse.quote(city_name)

## 第二步:访问url链接,解析服务器返回的json数据,变成python的字典数据
# 获取服务器返回的json字节串数据
weather_data = urllib.request.urlopen(url).read()
# 将字节串数据解码为unicode中的utf-8数据
weather_data = gzip.decompress(weather_data).decode('utf-8')
# 将json数据转为python的字典数据
weather_dict = eval(weather_data)
if weather_dict.get('desc') == 'invilad-citykey':
  print('您输入的城市未收录')
  
# 第三步:对字典进行索引,获取气温、风速、风向等天气信息
print('您查询的城市:',weather_dict['data']['city'])
print('--------------------------')
print('今天的天气')
print('温度',weather_dict['data']['wendu'])
print('感冒指数',weather_dict['data']['ganmao'])
print('--------------------------')
print('昨天的天气')
print('昨天:',weather_dict['data']['yesterday']['date'])
print('天气:',weather_dict['data']['yesterday']['type'])
print('最高气温:',weather_dict['data']['yesterday']['high'])
print('最低气温:',weather_dict['data']['yesterday']['low'])
print('风向:',weather_dict['data']['yesterday']['fx'])
print('风力:',weather_dict['data']['yesterday']['fl'][-5:-3])
print('--------------------------')
# 第四步:遍历forecast列表中的五个元素,打印天气信息
for each in weather_dict['data']['forecast']:
  print('日期',each['date'])
  print('天气',each['type'])
  print(each['high'])
  print(each['low'])
  print('风向',each['fengxiang'])
  print('风力:',each['fengli'][-5:-3])
  print('--------------------------')

python小程序基于Jupyter实现天气查询的方法

到此这篇关于python小程序基于Jupyter实现天气查询的方法的文章就介绍到这了,更多相关python Jupyter 天气查询内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python 基于Twisted框架的文件夹网络传输源码
Aug 28 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
Django实现的自定义访问日志模块示例
Jun 23 Python
python机器学习库常用汇总
Nov 15 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
python修改字典键(key)的方法
Aug 05 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
Sep 29 Python
python实现局域网内实时通信代码
Dec 22 Python
Python 批量读取文件中指定字符的实现
Mar 06 Python
使用Python防止SQL注入攻击的实现示例
May 21 Python
python编写softmax函数、交叉熵函数实例
Jun 11 Python
python源文件的字符编码知识点详解
Mar 04 Python
Python实现的北京积分落户数据分析示例
Mar 27 #Python
Pyspark获取并处理RDD数据代码实例
Mar 27 #Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 #Python
Python爬虫爬取、解析数据操作示例
Mar 27 #Python
python opencv进行图像拼接
Mar 27 #Python
Python爬虫爬取电影票房数据及图表展示操作示例
Mar 27 #Python
Pyspark读取parquet数据过程解析
Mar 27 #Python
You might like
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Python正则表达式常用函数总结
2017/06/24 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
django中forms组件的使用与注意
2019/07/08 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
python datetime中strptime用法详解
2019/08/29 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
运动会邀请函范文
2014/02/06 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
工伤私了协议书范本
2014/11/24 职场文书
2014年销售员工作总结
2014/12/01 职场文书