PyOWM:一个可以访问天气数据的 Python 库
最近有朋友问我,Python 有没有什么简单的方式能拿到天气预报数据?其实还真有个特别方便的小库 —— PyOWM。它是 OpenWeatherMap 提供的官方 Python SDK,用起来比直接调 API 轻松多了。下面我就带大家一步步看下它到底能干嘛、怎么用。
一、安装与初始化
首先得装库。终端里一句命令搞定:
pip install pyowm
然后需要去 OpenWeatherMap 官网 注册一个账号,申请个 API key,有了这个 key 才能正常访问天气数据。比如我们这样初始化:
from pyowm import OWM
owm = OWM('你的_API_KEY')
mgr = owm.weather_manager()
这里 mgr 就是个天气管理对象,后面所有天气查询都靠它。
二、获取实时天气
假设我想查下“上海”的天气,就一行代码:
observation = mgr.weather_at_place('Shanghai, CN')
weather = observation.weather
print(weather.status) # 比如:'Clouds'
print(weather.temperature('celsius')) # {'temp': 18.5, 'feels_like': 17.8, ...}
PyOWM 把数据封装成对象了,直接属性调用就行,不用自己去解析 JSON。 而且还能拿湿度、风速、气压、日出日落时间这些。
print(weather.humidity) # 湿度 %
print(weather.wind()) # 风速信息
print(weather.pressure) # {'press': 1013, 'sea_level': None}
这点挺贴心的,接口清晰,比直接访问 API 的体验好太多。
三、天气预报功能
除了当前天气,PyOWM 还可以看未来几天的预报。比如获取未来五天的天气趋势:
forecast = mgr.forecast_at_place('Shanghai, CN', '3h').forecast
for w in forecast:
print(w.reference_time('iso'), w.status, w.temperature('celsius')['temp'])
这里 '3h' 表示每 3 小时一个数据点,也可以改成 'daily' 查看每日汇总。 这个在做小工具、看趋势变化时特别有用。
四、结合地理坐标使用
有时候项目里拿到的是经纬度,而不是城市名,那也一样能查:
lat, lon = 31.2304, 121.4737# 上海
observation = mgr.weather_at_coords(lat, lon)
print(observation.weather.detailed_status)
甚至可以批量查询,比如配合数据库里的城市坐标,一次性拉取多个地方天气做分析或可视化。
五、查询空气质量(AQI)
PyOWM 还可以访问 OpenWeatherMap 的空气污染 API,这个在环境类应用里很实用:
air_mgr = owm.airpollution_manager()
aq = air_mgr.air_quality_at_coords(31.2304, 121.4737)
print(aq.aqi) # 空气质量指数
返回的 AQI 值一般 1-5,数值越大污染越严重。
六、一个简单的综合示例
比如我们想写个小脚本,每天早上自动提醒今天的天气:
from pyowm import OWM
from datetime import datetime
defget_today_weather(city):
owm = OWM('你的_API_KEY')
mgr = owm.weather_manager()
w = mgr.weather_at_place(city).weather
temp = w.temperature('celsius')['temp']
returnf"{datetime.now().strftime('%Y-%m-%d')}{city} 天气:{w.detailed_status},{temp}°C"
print(get_today_weather('Beijing, CN'))
可以再配合 smtplib 发邮件或用微信机器人推送,实现一个“天气日报”。
七、一些注意点
免费版 API 每分钟最多 60 次请求,做爬虫或大数据分析要注意限速。 城市名建议加国家代码,否则像 “Paris” 这种可能匹配到多个结果。 天气数据默认是 Kelvin 温度,要记得指定 'celsius'。
总的来说,PyOWM 就像给 OpenWeatherMap 套了个“Python 外壳”,封装得很自然,语义化很好,特别适合写脚本、工具、甚至嵌入到 Flask/Django 项目里当天气模块。
用几行代码就能拿到实时天气、预报和空气质量数据,轻松得很。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领