

























台风数据采集是很多项目的基础——不管是做台风路径可视化、灾害预警系统,还是气象数据分析,都离不开精准、高效的台风数据支撑。最近刚好做了相关需求,整理了一套完整的台风数据采集方案,涵盖权威数据源、实操方法,话不多说,直接上干货!
根据需求选择采集维度,比如做实时预警,重点抓动态数据;做历史分析,重点采集历史路径和基础信息。
中国气象局是国内台风监测的核心机构,不仅提供实时台风数据,还有完整的历史数据归档,同时涵盖多源观测设备(风云卫星、天气雷达、北斗探空等)的协同观测数据,数据可信度拉满。
中央气象台台风网没有公开API,但网页数据结构清晰,可通过爬虫解析获取实时台风和历史路径数据,适合需要大量数据且不想受API调用限制的场景。
代码示例(爬取当前台风列表及实时信息):
import requests
import re
import json
import pandas as pd
import time
# 1. 配置请求头(模拟浏览器,避免被反爬)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
# 2. 获取当前台风列表
def get_current_typhoon_list():
t = int(round(time.time() * 1000)) # 13位时间戳(网页动态加载需要)
url = f"http://typhoon.nmc.cn/weatherservice/typhoon/jsons/list_default?t={t}&callback=typhoon_jsons_list_default"
response = requests.get(url, headers=headers, verify=False)
# 解析JSON数据(处理网页回调格式)
data_str = re.match(".*?({.*}).*", response.text, re.S).group(1)
data = json.loads(data_str)
typhoon_list = data["typhoonList"]
# 筛选当前活跃的台风(state为start)
active_typhoon = []
for typhoon in typhoon_list:
if typhoon[7] == "start": # state字段,start表示活跃,stop表示结束
item = {
"台风ID": typhoon[0],
"英文名": typhoon[1],
"中文名": typhoon[2],
"编号": typhoon[4],
"名字含义": typhoon[6]
}
active_typhoon.append(item)
return active_typhoon
# 3. 获取单个台风的实时动态和路径数据
def get_typhoon_detail(typhoon_id):
t = int(round(time.time() * 1000))
url = f"http://typhoon.nmc.cn/weatherservice/typhoon/jsons/view_{typhoon_id}?t={t}&callback=typhoon_jsons_view_{typhoon_id}"
response = requests.get(url, headers=headers, verify=False)
data_str = re.match(".*?({.*}).*", response.text, re.S).group(1)
data = json.loads(data_str)
typhoon_data = data["typhoon"]
# 解析实时动态
detail = {
"台风ID": typhoon_id,
"当前状态": typhoon_data[3],
"中心经度": typhoon_data[8][-1][4],
"中心纬度": typhoon_data[8][-1][5],
"中心气压": typhoon_data[8][-1][6],
"最大风速": typhoon_data[8][-1][7],
"更新时间": typhoon_data[8][-1][1]
}
return detail
# 4. 批量采集并保存
if __name__ == "__main__":
active_typhoons = get_current_typhoon_list()
if active_typhoons:
all_detail = []
for typhoon in active_typhoons:
detail = get_typhoon_detail(typhoon["台风ID"])
# 合并基础信息和详细信息
all_detail.append({**typhoon, **detail})
time.sleep(1) # 延迟1秒,避免反爬
# 保存数据
df = pd.DataFrame(all_detail)
df.to_csv("中央气象台台风实时数据.csv", index=False, encoding="utf-8-sig")
print(f"共采集到{len(all_detail)}个活跃台风数据,已保存")
else:
print("当前无活跃台风")
数据处理与避坑指南
采集到的原始数据可能存在缺失值、格式不一致、异常值等问题,需进行清洗:
台风数据采集的核心是“选对数据源+用对方法”:新手优先用和风天气API,简单高效;需要大量数据或定制化采集,用爬虫爬取中央气象台台风网;
另外,随着气象观测技术的发展,多源协同观测(卫星+雷达+无人机+探空)的数据越来越丰富,合理结合这些数据,能让台风监测和分析更精准。


此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。