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

如何解决爬取气候数据时response.json()返回‘no data available’错误?

问题:POST请求返回200但提示无可用数据?

我今早尝试爬取气候数据,后来找到了获取所需数据的更好方法,但仍对这段代码的问题感到困惑。作为网络爬虫新手,我编写了如下代码,session.post()请求返回状态码200,我本以为这表示数据已找到,但req.json()返回{'error': 'no data available'}。请问这可能是什么原因?

import requests
s = requests.session()
url_search = 'https://data.rcc-acis.org/StnData'

headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}

data = {"elems":[{"name":"maxt","add":"t"},{"name":"mint","add":"t"},{"name":"avgt","add":"t"},{"name":"avgt","normal":"departure91","add":"t"},{"name":"hdd","add":"t"},{"name":"cdd","add":"t"},{"name":"pcpn","add":"t"},{"name":"snow","add":"t"},{"name":"snwd","add":"t"}],"sid":"KRNT+5","sDate":"2022-12-01","eDate":"2022-12-31"}

req = s.post(url_search, headers = headers, json = data)
j = req.json()

可能的原因及解决方案:

  • 站点ID格式问题:你使用的KRNT+5是带范围扩展的站点ID(+5通常指5英里内的周边站点),但RCC-ACIS的StnData接口对这种格式的支持可能有限,或者该范围内的站点在指定日期没有数据。建议先尝试纯站点ID KRNT 测试。
  • 参数组合冲突:add":"t参数用于请求添加时间戳,但部分要素与该参数的组合可能不被接口支持,或者过多要素同时请求导致接口返回异常。可以先简化请求,只保留1-2个基础要素(比如maxt)来排查。
  • 数据可用性问题:虽然2022-12是历史日期,但该站点在这段时间可能确实没有记录,或者接口对某些要素的历史数据存储有限。

测试用修正代码:

import requests

s = requests.session()
url_search = 'https://data.rcc-acis.org/StnData'

headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}

# 简化参数,先验证单一站点和基础要素
data = {
    "elems": [{"name":"maxt"}],
    "sid":"KRNT",
    "sDate":"2022-12-01",
    "eDate":"2022-12-31"
}

req = s.post(url_search, headers=headers, json=data)
j = req.json()
print(j)

如果这个简化请求能返回有效数据,说明问题出在原参数的站点ID格式或要素组合上,可以逐步添加要素、调整sid格式来找到适配的请求参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:25:10