惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Scott Helme
Scott Helme
N
Netflix TechBlog - Medium
AI
AI
Security Latest
Security Latest
GbyAI
GbyAI
P
Proofpoint News Feed
Y
Y Combinator Blog
A
Arctic Wolf
G
Google Developers Blog
U
Unit 42
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Vulnerabilities – Threatpost
Know Your Adversary
Know Your Adversary
Cisco Talos Blog
Cisco Talos Blog
T
Tor Project blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
C
Check Point Blog
B
Blog RSS Feed
The GitHub Blog
The GitHub Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 【当耐特】
博客园 - Franky
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
Cisco Blogs
云风的 BLOG
云风的 BLOG
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Microsoft Security Blog
Microsoft Security Blog
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
Latest news
Latest news
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
WordPress大学
WordPress大学
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
The Hacker News
The Hacker News
Simon Willison's Weblog
Simon Willison's Weblog
V
V2EX
Project Zero
Project Zero
博客园_首页

博客园 - 逸乐太子

豆包无水印图片下载器|新媒体运营、自媒体创作者必备神器 免费无广告!网易UU远程,解锁远程办公、娱乐、运维全能玩法 告别手动复制!公众号文章批量导出工具,极致提升内容运营效率 高效办公神器:可视化Excel文档合并工具,告别手动复制粘贴 全国分省 Excel 爬取后,一键统计全文件数据行数|附即用型统计工具 某速体育网站中canvas数据获取 豆包生成的图片带有AI字样怎么去除? 中国马拉松官方网站赛历信息采集工具 国家标准批量采集工具:全量元数据检索 + 批量导出 知网文献批量采集:BibTeX/EndNote 完整导出(含摘要、关键词、被引、全文链接) 超级课堂题库下载本地工具 洋葱智课在线题库导出工具 【python爬虫定制】PubScholar公益学术平台期刊名称爬取 【python数据采集】阳光高考学校信息采集 python程序的守护工具 【Python数据采集】国家自然科学基金大数据知识管理服务门户数据采集 pyinstaller 打包时第三方模块与图片资源加载 使用python爬取豆瓣电影短评评论内容 使用 js 实现 urljoin 方法 使用 Python 爬取高校教师信息 python从PDF文件中读取国民经济行业分类 python爬虫之JS逆向某易云音乐 国务院办公厅放假通知信息获取 python爬虫之JS逆向 python爬虫之企某科技JS逆向 linux下telnet命令有时无法退出 H5中腾讯地图定位信息在安卓手机中获取不到
台风数据采集全攻略:从数据源到实操落地
逸乐太子 · 2026-05-03 · via 博客园 - 逸乐太子

台风数据采集是很多项目的基础——不管是做台风路径可视化、灾害预警系统,还是气象数据分析,都离不开精准、高效的台风数据支撑。最近刚好做了相关需求,整理了一套完整的台风数据采集方案,涵盖权威数据源、实操方法,话不多说,直接上干货!

在开始采集前,先理清核心需求,避免做无用功。台风数据的核心维度主要分为3类,覆盖从实时监测到历史回溯的全场景:

  • 基础信息:台风名称(中文名+英文名)、编号、生成时间、生成海域、强度等级(热带低压、热带风暴、强热带风暴等);
  • 动态数据:实时位置(经纬度)、移动方向、移动速度、中心气压、最大风速、风圈半径;
  • 延伸数据:历史路径、未来预报路径(多时段预测)、影响区域、卫星云图关联数据。

根据需求选择采集维度,比如做实时预警,重点抓动态数据;做历史分析,重点采集历史路径和基础信息。

数据的准确性是核心,优先选择官方机构或权威平台的数据源,避免使用非正规渠道的数据(易出错、易失效)。整理了5个常用且免费的数据源,各有侧重,按需选择:

中国气象局(最权威,国内台风首选)

中国气象局是国内台风监测的核心机构,不仅提供实时台风数据,还有完整的历史数据归档,同时涵盖多源观测设备(风云卫星、天气雷达、北斗探空等)的协同观测数据,数据可信度拉满。

  • 核心数据:实时台风动态、历史路径、强度变化、卫星云图、雷达观测数据;
  • 获取方式:① 网页爬取(中央气象台台风网:http://typhoon.nmc.cn/web.html);② 官方API(需申请密钥,适合批量采集);
  • 优势:数据全面、更新及时(每1-3小时更新一次),覆盖西北太平洋及南海区域台风;

爬取中央气象台台风网(无API限制,适合批量采集)

中央气象台台风网没有公开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("当前无活跃台风")

数据处理与避坑指南

1. 数据清洗(必做步骤)

采集到的原始数据可能存在缺失值、格式不一致、异常值等问题,需进行清洗:

  • 缺失值处理:中心气压、风速等关键字段缺失时,可通过相邻时间点数据插值补充,或剔除无效数据;
  • 格式统一:将经纬度、风速、气压等单位统一(如风速统一为m/s,气压统一为hPa);
  • 异常值过滤:根据物理约束筛选异常数据,如台风移动速度不超过100km/h,中心气压与最大风速满足特定关联关系。

2. 避坑要点(新手必看)

  • 反爬问题:爬取网页时,一定要添加请求头(User-Agent),控制爬取频率,避免短时间内大量请求;
  • API密钥:使用和风天气、NOAA等API时,妥善保管密钥,避免泄露,免费版注意调用频率限制;
  • 数据更新:台风数据实时变化,需定时采集(如每1-3小时),确保数据时效性;
  • 数据版权:官方数据源的台风数据可用于非商业用途,商业项目需提前联系相关机构获取授权;
  • 多源校验:单一数据源可能存在误差,可结合多个权威数据源(如中国气象局+和风天气)交叉校验,提高数据准确性。

3. 数据保存与可视化

  • 保存方式:少量数据可保存为CSV/Excel,大量数据(如历史数据)建议保存到MySQL、MongoDB等数据库;
  • 可视化:采集完成后,可使用Matplotlib、ECharts等工具绘制台风路径图、强度变化曲线,更直观地展示数据(后续会单独写一篇台风数据可视化教程)。

总结

台风数据采集的核心是“选对数据源+用对方法”:新手优先用和风天气API,简单高效;需要大量数据或定制化采集,用爬虫爬取中央气象台台风网;

另外,随着气象观测技术的发展,多源协同观测(卫星+雷达+无人机+探空)的数据越来越丰富,合理结合这些数据,能让台风监测和分析更精准。

image

a5080c81efe2e2f0e4e4e301c27559a6