Python爬取美国国家气象局API获取温度预报的格式转换问题
解决方法
错误排查
你当前代码存在4个核心问题:
- 接口字段路径错误:该接口温度数据存储在
response['properties']['temperature']['values'],而非response['data']['values'] - 字典赋值语法错误:不能直接在Temperature字段后写两个值,需要分别处理摄氏度、华氏度
- 时间提取逻辑错误:原始数据无
T字段,所有时间信息都在validTime字段中,需要额外解析 - 缺少格式化步骤:温度、时间都需要按要求格式化后才能输出符合要求的内容
完整可运行代码
import datetime import requests def gets_temperature_forecast(grid_url="https://api.weather.gov/gridpoints/MFL/44,66"): # 发送请求获取数据,部分环境需要加UA才能请求成功 headers = {"User-Agent": "Mozilla/5.0"} response = requests.get(grid_url, headers=headers) response.raise_for_status() weather_data = response.json() result_list = [] # 遍历温度数据 for item in weather_data['properties']['temperature']['values']: # 解析validTime字段,取斜杠前的起始时间 time_str = item['validTime'].split('/')[0] dt_obj = datetime.datetime.fromisoformat(time_str) # 格式化日期、时间 date = dt_obj.strftime("%Y-%m-%d") time = dt_obj.strftime("%H:%M:%S") # 温度计算与格式化 temp_c = round(item['value'], 2) temp_f = round(temp_c * 1.8 + 32, 1) # 按要求格式化输出 output_str = f"****Date: {date} Time: {time} Temperature: {temp_c} ℃ ({temp_f} ℉)****" result_list.append(output_str) return result_list # 测试调用 if __name__ == "__main__": forecasts = gets_temperature_forecast() for line in forecasts: print(line)
扩展说明
如果需要实现传入城市名返回预报的功能,需要额外补充两步逻辑:
- 调用地理编码接口将城市名转换为经纬度
- 请求美国国家气象局的
https://api.weather.gov/points/{lat},{lon}接口,获取对应区域的grid预报地址,再代入上述函数即可
内容的提问来源于stack exchange,提问作者Beth T
相关产品推荐
相关产品推荐

