You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

扩展说明

如果需要实现传入城市名返回预报的功能,需要额外补充两步逻辑:

  1. 调用地理编码接口将城市名转换为经纬度
  2. 请求美国国家气象局的https://api.weather.gov/points/{lat},{lon}接口,获取对应区域的grid预报地址,再代入上述函数即可

内容的提问来源于stack exchange,提问作者Beth T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:06:04