如何解决爬取气候数据时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接口对这种格式的支持可能有限,或者该范围内的站点在指定日期没有数据。建议先尝试纯站点IDKRNT测试。 - 参数组合冲突:
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
相关产品推荐
相关产品推荐

