我的知识记录

Python调用公开API获取天气数据:实时查询与解析

讲解用Python requests调用公开天气API,传入城市名获取实时温度、湿度、风力,解析JSON返回并格式化输出,适合做日报、监控、自动化报表。

场景痛点

每天早上要做晨会日报,天气预报得自己打开App查;或者做自动化报表想把天气数据填进去。调用公开天气API,传一个城市名,几行代码拿到实时温度、湿度、风力,结果存成文件或直接填进表格,比手动查快多了。

用到的库

pip install requests beautifulsoup4 lxml

完整代码

# 导入库
import requests
from datetime import datetime

def get_weather(city="北京"):
"""调用天气API获取城市实时天气"""
# 这里用一个公开的示例JSON接口模拟天气数据结构
# 实际项目可以替换成心知天气、和风天气、OpenWeatherMap等
url = "https://httpbin.org/json"

try:
resp = requests.get(url, timeout=10)
resp.raise_for_status()
data = resp.json()

# 真实API返回结构类似:
# {
#   "city": "北京",
#   "temperature": 25,
#   "humidity": 60,
#   "weather": "晴",
#   "wind": "东南风3级"
# }
# 下面演示如何按字典方式取值,缺失字段给默认值
city_name = data.get("city", city)
temperature = data.get("temperature", "--")
humidity = data.get("humidity", "--")
weather = data.get("weather", "--")
wind = data.get("wind", "--")

# 格式化成一行报告
report = (
f"[{datetime.now().strftime('%Y-%m-%d %H:%M')}] "
f"{city_name}:{weather},温度{temperature}℃,"
f"湿度{humidity}%,{wind}"
)
print(report)
return report

except requests.exceptions.RequestException as e:
print("天气接口请求失败:", e)
return None

def batch_weather(cities):
"""批量查询多个城市"""
results = []
for city in cities:
report = get_weather(city)
if report:
results.append(report)
return results

if __name__ == "__main__":
# 单城市查询
get_weather("北京")

# 多城市批量查询
batch_weather(["上海", "广州", "深圳"])

代码讲解

  • get_weather 函数封装一次API调用:发请求→判断状态码→.json() 转字典→按key取值。
  • .get(key, 默认值) 而不是 data[key],这样某个字段缺失时不会直接抛KeyError,给个 -- 占位。
  • datetime.now().strftime(...) 给结果加上查询时间,方便做日报时留痕。
  • 批量查询就是循环调用单城市函数,每个城市之间建议间隔0.2秒,避免触发限流。
  • 真实天气API(心知、和风等)通常需要注册拿API key,放在URL参数或Headers里传。

运行结果

运行后控制台打印一行天气报告,包含时间、城市、天气、温度、湿度、风力。示例用httpbin返回的是占位数据,换成真实API后字段会填充真实天气信息。

注意事项

  • 免费天气API通常有调用频率限制,不要一秒钟调几百次,结果建议本地缓存。
  • API key是敏感信息,别硬编码在脚本里,用环境变量或配置文件读。
  • 有些API返回的温度是开尔文,要自己减去273.15转成摄氏度。
  • 网络不通或API挂掉时要优雅降级,不要让整个日报任务崩掉。

Python调用公开API获取天气数据:实时查询与解析

标签:

更新时间:2026-09-14 20:52:40

上一篇:Python批量抓取网页存成本地HTML:离线镜像与归档

下一篇:Python调用API查询汇率:人民币美元换算与批量计算