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

使用Python requests获取NOAA数据时无法拉取1-2月数据的问题

NOAA API数据拉取问题排查与解答

问题描述

  • 使用Python requests调用NOAA CDO API v2获取GHCND数据集的TMAX数据已有数年,核心代码如下:
url = 'https://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=GHCND&datatypeid=TMAX&limit=1000&stationid=GHCND:{StationID}&startdate={'2020-01-01'}&enddate={'2020-12-31'}
dates_temp, temps = [], []
r = requests.get(url, headers={'token': 'My_token'})
d = json.loads(r.text)
try:
    data_temps = [item for item in d['results'] if item['datatype'] == 'TMAX']
    dates_temp += [item['date'] for item in data_temps]
    temps += [item['value'] for item in data_temps]
  • 当前问题:无论选择哪个站点或年份,都无法拉取1-2月的数据,返回的第一条数据始终是2月28日或3月1日;但NOAA官方界面可下载对应时段的数据,测试站点确认有1-2月数据。
  • 疑问:NOAA API是否有更新?是否存在v3版本?不愿重写代码改用SDK(现有代码此前稳定,且R语言RNOAA库返回数据量远少于直接用requests获取的)

排查与解答

1. API版本情况

NOAA CDO API目前仍以v2为稳定版本,暂未推出官方正式的v3版本。近期核心接口逻辑未发生大变更,但部分参数处理规则可能有微调。

2. 1-2月数据缺失的修复方案

(1)修复日期参数格式错误

你的URL中startdate和enddate用{'2020-01-01'}这种大括号包裹的写法存在语法错误,会导致API无法正确识别起始日期,进而返回默认的后续时段数据。
修正后URL示例(建议用f-string拼接站点ID):

url = f'https://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=GHCND&datatypeid=TMAX&limit=1000&stationid=GHCND:{StationID}&startdate=2020-01-01&enddate=2020-12-31'

(2)处理分页数据

limit=1000是单页最大返回量,如果1-2月数据在更早的分页中,当前代码只请求第一页会导致遗漏。需检查返回结果的metadata字段判断是否有多页数据,循环请求后续分页:

offset = 0
total_count = 1
while offset < total_count:
    url = f'https://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=GHCND&datatypeid=TMAX&limit=1000&offset={offset}&stationid=GHCND:{StationID}&startdate=2020-01-01&enddate=2020-12-31'
    r = requests.get(url, headers={'token': 'My_token'})
    d = r.json()
    total_count = d['metadata']['resultset']['count']
    data_temps = [item for item in d['results'] if item['datatype'] == 'TMAX']
    dates_temp += [item['date'] for item in data_temps]
    temps += [item['value'] for item in data_temps]
    offset += 1000

(3)显式指定排序规则

NOAA API默认按日期升序返回数据,但参数异常可能导致排序失效。可在URL中添加sortfield=date和sortorder=asc参数,确保数据按日期正序返回:

url = f'https://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=GHCND&datatypeid=TMAX&limit=1000&sortfield=date&sortorder=asc&stationid=GHCND:{StationID}&startdate=2020-01-01&enddate=2020-12-31'

3. SDK相关说明

NOAA官方Python SDK(如noaa-sdk)确实存在数据返回量受限的情况,这是因为SDK内部封装了参数过滤逻辑,直接用requests调用API能获取更完整的原始数据,优先修改现有代码的方案合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:52:08