【Python】Python 获取天气数据

Python 获取天气数据

检查天气似乎相当简单:打开 Web 浏览器,点击地址栏, 输入天气网站的 URL(或搜索一个,然后点击链接), 等待页面加载,跳过所有的广告等。

其实,如果有一个程序,下载今后几天的天气预报,并以 纯文本打印出来,就可以跳过很多无聊的步骤。该程序利用 第11章介绍的 requests 模块,从网站下载数据。 总的来说,该程序将执行以下操作:

从命令行读取请求的位置。

从OpenWeatherMap.org下载JSON天气数据。

将 JSON 数据字符串转换成 Python 的数据结构。

打印今天和未来两天的天气。

因此,代码需要完成以下任务:

连接 sys.argv 中的字符串,得到位置。

调用 requests.get() ,下载天气数据。

调用 json.loads(),将JSON数据转换 为Python数据结构。

打印天气预报。

针对这个项目,打开一个新的文件编辑器窗口, 并保存为 quickWeather.py 。

第1步:从命令行参数获取位置

该程序的输入来自命令行。让 quickWeather.py 看起来像这样:

#! python3

quickWeather.py - Prints the weather for a location from the command line.

import json, requests, sys

Compute location from command line arguments.

if len(sys.argv) < 2:
print(‘Usage: quickWeather.py location’)
sys.exit()
location=“长春”
#T0D0: Download the JSON data from OpenWeatherMap.org’s API.

#T0D0: Load JSON data into a Python variable.
在 Python 中,命令行参数存储在 sys.argv 列表里。 #! 行和 import 语句之后,程序会检查是否有多个 命令行参数(回想一下, sys.argv 中至少有一个元素 sys.argv[0] ,它包含了Python 脚本的文件名)。 如果该列表中只有一个元素,那么用户没有在命 令行中提供位置,程序向用户提供“Usage(用法)”信息, 然后结束。

命令行参数以空格分隔。命令行参数San Francisco, CA将使 sys.argv中保存[‘quickWeather.py’,‘San’,‘Francisco’, ‘CA’]。 因此,调用 join()方法,将 sys.argv 中除第一个字符串以 外的字符串连接起来。将连接的字符串存储在变量location 中。

第2步:下载 JSON 数据

OpenWeatherMap.org提供了 JSON 格式的实时天气信息。 你的程序只需要下载页面 http://api.openweathermap.org/data/2.5/forecast/daily?q=&cnt=3, 其中是想知道天气的城市。 将以下代码添加到 quickWeather.py 中。

#! python3

quickWeather.py - Prints the weather for a location from the command line.

import json, requests, sys

Compute location from command line arguments.

if len(sys.argv) < 2:
print(‘Usage: quickWeather.py location’)
sys.exit()
location=“长春”
weatherJsonUrl = “http://wthrcdn.etouch.cn/weather_mini?city=%s” % (location)
response = requests.get(weatherJsonUrl)

try:

response.raise_for_status()

except:

print("网址请求出错")

response = requests.get(weatherJsonUrl)

weatherData = json.loads(response.text)

w = weatherData[‘data’]

TODO: Load JSON data into a Python variable.

我们从命令行参数中得到了location 。为了生成要访问的网址, 我们利用%s占位符,将 location 中保存的字符串插入 URL 字符串的那个位置。结果保存在 url 中,并将 url 传入 requests.get() 。requests.get() 调用 返回一个Response 对象,它可以通过调用 raise_for_status() 来检查错误。如果不发生异常, 下载的文本将保存在 response.text 中。

第3步:加载 JSON 数据并打印天气

response.text成员变量保存了一个JSON格式数据的 大字符串。要将它转换为Python值,就调用json.loads() 函数。JSON数据会像这样:

{‘city’:{‘coord’: {‘lat’: 37.7771, ‘Ion’: -122.42}, ‘country’: ’ United States of America’, ‘id’: ‘5391959’,
‘name’: ‘San Francisco’,‘population’: 0},
‘cnt’:3,
‘cod’:200,
‘list’:[{‘clouds’: 0,‘deg’: 233,‘dt’: 1402344000,‘humidity’: 58,‘pressure’: 1012.23, 'speed1: 1.96,
‘temp’: {‘day’: 302.29, ‘eve’: 296.46, ‘max’: 302.29, ‘min’:289.77, ‘morn’: 294.59, ‘night’: 289.77},
‘weather’: [{‘description’:‘sky is clear’,
‘icon’:‘01d’,
–snip–
可以将weatherData传入pprint.pprint,查看这个数据。 你可能要查找http://openweathermap.org/ ,找到关于这些 字段含义的文档。例如,在线文档会告诉你,'day’后面的 302.29是白天的开尔文温度,而不是摄氏或华氏温度。

你想要的天气描述在’nain’和’description’之后。 为了整齐地打印出来,在 quickWeather.py 中添加以下代码。

#! python3

quickWeather.py - Prints the weather for a location from the command line.

import json, requests, sys

Compute location from command line arguments.

if len(sys.argv) < 2:
print(‘Usage: quickWeather.py location’)
sys.exit()
location=“长春”
weatherJsonUrl = “http://wthrcdn.etouch.cn/weather_mini?city=%s” % (location)
response = requests.get(weatherJsonUrl)

try:

response.raise_for_status()

except:

print("网址请求出错")

response = requests.get(weatherJsonUrl)

weatherData = json.loads(response.text)

w = weatherData[‘data’]

print(“地点:%s” % w[‘city’])

date_a = []

highTemp = []

lowTemp = []

weather = []

for i in range(len(w[‘forecast’])):
date_a.append(w[‘forecast’][i][‘date’])

highTemp.append(w['forecast'][i]['high'])lowTemp.append(w['forecast'][i]['low'])weather.append(w['forecast'][i]['type'])print('天气地点 %s:' % (location))
print("日期:" + date_a[i])print("\t温度:最" + lowTemp[i] + '℃~最' + highTemp[i] + '℃')print("\t天气:" + weather[i])print("\n今日着装:" + w['ganmao'])print("当前温度:" + w['wendu'] + "℃")

地点:长春
天气地点 长春:
日期:5日星期天
温度:最低温 19℃℃~最高温 24℃℃
天气:中雨

今日着装:感冒低发期,天气舒适,请注意多吃蔬菜水果,多喝水哦。
当前温度:19℃
天气地点 长春:
日期:6日星期一
温度:最低温 18℃℃~最高温 26℃℃
天气:雷阵雨

今日着装:感冒低发期,天气舒适,请注意多吃蔬菜水果,多喝水哦。
当前温度:19℃
天气地点 长春:
日期:7日星期二
温度:最低温 17℃℃~最高温 27℃℃
天气:多云

今日着装:感冒低发期,天气舒适,请注意多吃蔬菜水果,多喝水哦。
当前温度:19℃
天气地点 长春:
日期:8日星期三
温度:最低温 18℃℃~最高温 29℃℃
天气:晴

今日着装:感冒低发期,天气舒适,请注意多吃蔬菜水果,多喝水哦。
当前温度:19℃
天气地点 长春:
日期:9日星期四
温度:最低温 20℃℃~最高温 31℃℃
天气:晴

今日着装:感冒低发期,天气舒适,请注意多吃蔬菜水果,多喝水哦。
当前温度:19℃
请注意,代码将 weatherData['list’]保存在变量 w 中, 这将节省一些打字时间。可以用 w[0] 、w[1]和 w[2] 来取得今天、明天和后天天气的字典。这些字典都有 ‘weather’ 键,其中包含一个列表值。你感兴趣的是 第一个列表项(一个嵌套的字典,包含几个键),下标是0。 这里,我们打印出保存在’main’和’description’键 中的值,用连字符隔开。

如果用命令行参数quickWeather.py San Francisco,CA 运行这个程序,输出看起来是这样的:

Current weather in San Francisco, CA:
Clear - sky is clear

Tomorrow:
Clouds - few clouds

Day after tomorrow:
Clear - sky is clear

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 超详细的WebService创建、发布与调用(VS2022)

本文章是以vs2022来创建的&#xff0c;对内容进行了补充和丰富。如果想看2019的&#xff0c;可以参考。Visual Studio 2019创建 WebServiceCSDN 1.编写接口 打开VS2022,新建项目&#xff0c;这里我选择的是 “ASP.NET Web应用程序(.NET Framework)”。 在这里有一个注意点&a…

Vue整合

基础配置&#xff1a; 1.创建&#xff1a;cmd 中 输入 create vue vue_name 启动命令&#xff1a;npm run serve 2.当node_modules(依赖)丢失时通过 npm install 下载 【根据&#xff1a;package-lock.json下载】 3.下载路由 npm i vue-router3.5.2 -S main.js导入 // np…

机器学习网络模型绘图模板

一 前言 本期为读者推荐一款名为ML Visuals的机器学习画图PPT模板&#xff0c;ML Visuals 专为解决神经网络画图问题设计&#xff0c;通过提供免费的专业的、科学的和充分的视觉和图形来帮助机器学习社区改善科学传播。目前&#xff0c;ML Visuals 包含了超过100多个的自定义图…

【NLTK系列01】:nltk库介绍

一、说明 NLTK是个啥&#xff1f;它是个复杂的应用库&#xff0c;可以实现基本预料库操作&#xff0c;比如&#xff0c;、将文章分词成独立token&#xff0c;等操作。从词统计、标记化、词干提取、词性标记&#xff0c;停用词收集&#xff0c;包括语义索引和依赖关系解析等。 …

[QCM6125][Android13] 默认关闭dm-verity以及OTA升级校验vbmeta和framework matrix失败问题

问题描述 在user版本增加root权限之后&#xff0c;每次进行remount的时候&#xff0c;总会提示 remount of the / superblock failed: Permission denied remount failed 这时候&#xff0c;需要先关闭dm-verify&#xff0c;重启&#xff0c;再remount&#xff1b;整个过程过于…

LeetCode【128】最长连续序列

题目&#xff1a; 分析&#xff1a; 1、最长连续序列的长度为 y-x1&#xff0c;如1-4&#xff1a;4-11 4 2、不要被这里的On误导&#xff0c;不敢使用双层循环 3、只要找到最小的数值&#xff0c;并由此开始计算&#xff0c;不产生重复计算&#xff0c;则为On 代码&#xf…

Docker简单案例

我们安装完Docker之后就可以练习了. 镜像 案例1-拉取、查看镜像 1&#xff09;首先去镜像仓库搜索nginx镜像&#xff0c;比如 : Docker Hub Container Image Library | App Containerization 搜索我们想要拉取的镜像 , 例如: nginx 复制命令&#xff1a; docker pull nginx …

【数据结构】单链表按位序插入元素e【前插】(带头结点的和不带头结点的)这篇很重要,文字说明比起其他篇是正确的

声明单链表的结构体成员 struct LNode {int data;struct LNode *next; };typedef struct LNode LNode;// 或者: 两者是等价的 typedef struct LNode {int data;struct LNode *next; }LNode;按位序插入元素e&#xff1a;就是在第i个位置插入新结点&#xff0c;数据域为e 以下带…

2023-10-10 mysql-{mysql_rm_db}-失败后回滚-记录

摘要: 2023-10-10 mysql-{mysql_rm_db}-失败后回滚-记录 mysql_rm_db 完整函数代码: /**Drop all tables, routines and events in a database and the database itself.@param thd Thread handle@param db Database name in the case given by userIts alr…

找单身狗2

一个数组中只有两个数字是出现一次&#xff0c;其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。 例如&#xff1a;有数组的元素是&#xff1a;1,2,3,4,5,1,2,3,4,6&#xff0c;只有5和6只出现1次&#xff0c;要找出5和6。 这里我们不妨回忆一下之前找单身…

实现SHELL中的列表和字典效果

很多情况下我们需要有种类型来存储数据&#xff0c;在python中有列表和字典&#xff0c;golang中有切片slice和map&#xff0c;那么在shell中&#xff0c;我们能否实现列表和字典呢&#xff0c;答案是肯定的&#xff0c;下面跟着博哥的示例来一步步掌握在shell中实现列表和字典…

centos7下安装elasticsearch7.8.1并配置远程连接

1、下载安装包 sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.1-linux-x86_64.tar.gz 2、解压 sudo tar -zxvf elasticsearch-7.8.1-linux-x86_64.tar.gz 3、添加用户并设置密码 sudo useradd es sudo passwd es # 设置密码 Lida15…

嵌入式系统开发【深入浅出】 EXTI 与 NVIC

目录 CPU 感知外部事件变化的三种方式 中断分三个级别 中断控制器 STM32 的中断和异常 NVIC 中断控制器 NVIC 结构体成员 抢占优先级和响应优先级 简单配置NVIC中断控制器 EXTI 外部中断【中断源级】​ STM32系列微控制器实际上最多有23根外部中断线&#xff08;EXT…

“桥接模式”和“NAT模式”以及“host-only模式(仅主机模式)”

使用虚拟机的时候&#xff0c;我们常看到网络链接配置中&#xff0c;有【桥接】、【NAT】、【仅主机】的选项&#xff0c;今天就来介绍一下这三种网络链接模式。 关于虚拟机中配置网络的内容可以看这篇博客&#xff1a; 深入浅出的介绍一下虚拟机VMware Workstation——part2…

千兆以太网传输层 UDP 协议原理与 FPGA 实现(UDP回环)

文章目录 前言心得体会一、UDP GMII 回环测试工程介绍二、UDP GMII 回环测试工程顶层设计三、UDP GMII 回环测试工程仿真设计四、UDP GMII 回环测试工程仿真波形五、UDP GMII 回环测试工程上板演示前言 经过前面章节的理论讲解和模块设计,相信大家已经对以太网传输以及如何实…

自己一天在家没事就爱折腾

来吃馍馍了&#xff0c;看我自己动手做的花卷&#xff0c;味道一定美极了&#xff0c;哈哈&#xff0c;有没有想吃的呀&#xff01;快来我家&#xff0c;我和你一起分享。

三维地下管线建模软件MagicPipe3D V3.1.3发布

经纬管网建模系统MagicPipe3D V3.1.3持续更新&#xff0c;内容如下&#xff1a; &#xff08;1&#xff09;新增管线流向配置&#xff0c;建模生成带流向箭头管道模型&#xff1b; &#xff08;2&#xff09;新增建模完成后可以直接载入3DTiles或obj模型功能&#xff1b; &a…

5.(vue3.x+vite)v-if与v-show区别

前端技术社区总目录(订阅之前请先查看该博客) 1:效果预览 2:v-if与v-show区别 1、v-if会增删DOM元素。 2、v-show比v-if性能更高,因为v-show只能动态的改变样式(display),不需要增删DOM元素。 3、v-if切换时候回实时的销毁和重建内部的事件、钩子函数等,v-show只会…

基于大规模分布式系统的云原生运维实践

在云计算、大数据、人工智能等新兴技术的推动下,众多行业都在经历一场轰轰烈烈的数字化转型大潮。随着容器技术和编排系统的发展、基础设施不断云化、分布式微服务架构不断演进和敏捷、DevOps等开发理念的带动&#xff0c;应用云化已经是不可逆转的趋势&#xff0c;云原生也成为…

Docker 网络访问原理解密

How Container Networking Works: Practical Explanation 这篇文章讲得非常棒&#xff0c;把docker network讲得非常清晰。 分为三个部分&#xff1a; 1&#xff09;docker 内部容器互联。 2&#xff09;docker 容器 访问 外部root 网络空间。 3&#xff09;外部网络空间…