笔记-windy气象数据获取

文章讨论了如何通过设置代理访问被墙的Windy气象数据API,展示了一个示例程序来获取点预测数据。API返回的时间间隔不固定,每年的费用大约在7-8千人民币。同时提到,Windy的数据来源在API文档中有详细说明,而GitHub上的Windy爬虫可能已不再适用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 气象数据获取
    • 网站:https://www.windy.com/?23.118,113.254,5
    • 接口:Windy: Point Forecast API - Docs
    • 问题
      • 接口域名被墙,使用需要通过代理才能连通
    • 示例程序

      ```
      		  import requests
      		  import os
      		  # https://www.windy.com/21.572/111.832?20.987,111.833,8
      		  
      		  os.environ["http_proxy"] = "http://127.0.0.1:1088"
      		  os.environ["https_proxy"] = "http://127.0.0.1:1088"
      		  import requests
      		  import json
      		  
      		  api_url = 'https://api.windy.com/api/point-forecast/v2'
      		  
      		  data = {
      		    "lat": 20.987,
      		    "lon": 111.833, 
      		    "model": "gfs",
      		    "parameters": ["wind", "dewpoint", "rh", "pressure"],
      		    "key": "你的key" 
      		  }
      		  
      		  response = requests.post(api_url, json=data)
      		  print(response.text)
      		  result = response.json()
      ```
      
    • API返回数据时间间隔不定,如

      ```
      		  2023-07-26 05:00:00
      		  2023-07-26 08:00:00
      		  2023-07-26 11:00:00
      		  2023-07-26 14:00:00
      		  2023-07-26 17:00:00
      		  2023-07-26 20:00:00
      		  2023-07-26 23:00:00
      		  2023-07-27 02:00:00
      		  2023-07-27 05:00:00
      		  2023-07-27 08:00:00
      		  2023-07-27 11:00:00
      		  2023-07-27 14:00:00
      		  2023-07-27 17:00:00
      		  2023-07-27 20:00:00
      		  2023-07-27 23:00:00
      		  2023-07-28 02:00:00
      		  2023-07-28 05:00:00
      		  2023-07-28 08:00:00
      		  2023-07-28 11:00:00
      		  2023-07-28 14:00:00
      		  2023-07-28 17:00:00
      		  2023-07-28 20:00:00
      		  2023-07-28 23:00:00
      		  2023-07-29 02:00:00
      		  2023-07-29 05:00:00
      		  2023-07-29 08:00:00
      		  2023-07-29 11:00:00
      		  2023-07-29 14:00:00
      		  2023-07-29 17:00:00
      		  2023-07-29 20:00:00
      		  2023-07-29 23:00:00
      		  2023-07-30 02:00:00
      		  2023-07-30 05:00:00
      		  2023-07-30 08:00:00
      		  2023-07-30 11:00:00
      		  2023-07-30 14:00:00
      		  2023-07-30 17:00:00
      		  2023-07-30 20:00:00
      		  2023-07-30 23:00:00
      		  2023-07-31 02:00:00
      		  2023-07-31 05:00:00
      		  2023-07-31 08:00:00
      		  2023-07-31 11:00:00
      		  2023-07-31 14:00:00
      		  2023-07-31 17:00:00
      		  2023-07-31 20:00:00
      		  2023-07-31 23:00:00
      		  2023-08-01 02:00:00
      		  2023-08-01 05:00:00
      		  2023-08-01 08:00:00
      		  2023-08-01 11:00:00
      		  2023-08-01 14:00:00
      		  2023-08-01 17:00:00
      		  2023-08-01 20:00:00
      		  2023-08-01 23:00:00
      		  2023-08-02 02:00:00
      		  2023-08-02 05:00:00
      		  2023-08-02 08:00:00
      		  2023-08-02 11:00:00
      		  2023-08-02 14:00:00
      		  2023-08-02 17:00:00
      		  2023-08-02 20:00:00
      		  2023-08-02 23:00:00
      		  2023-08-03 02:00:00
      		  2023-08-03 05:00:00
      		  2023-08-03 08:00:00
      		  2023-08-03 11:00:00
      		  2023-08-03 14:00:00
      		  2023-08-03 17:00:00
      		  2023-08-03 20:00:00
      		  2023-08-03 23:00:00
      		  2023-08-04 02:00:00
      		  2023-08-04 05:00:00
      		  2023-08-04 08:00:00
      		  2023-08-04 11:00:00
      		  2023-08-04 14:00:00
      		  2023-08-04 17:00:00
      		  2023-08-04 20:00:00
      		  2023-08-04 23:00:00
      		  2023-08-05 02:00:00
      ```
      

API被墙,项目侧使用需考虑合规专线网络调用

API费用约一年7-8k RMB

windy的数据来源在API文档中有详细说明

Github上仅有的windy爬虫通过查看源代码判断基本已不可使用,底部信息栏数据并没有通过html直接返回

### 如何使用Python爬虫抓取Windy网站的气象数据 为了实现这一目标,通常会采用`requests`库来发送HTTP请求,并利用`BeautifulSoup`或直接处理JSON响应(如果API提供了结构化的JSON输出)。对于某些现代Web服务而言,尤其是像Windy这样的站点,更倾向于通过API接口提供数据,而非传统的HTML页面展示。 考虑到这一点,在开始之前应该先查阅Windy官方文档确认是否存在公开可用的数据访问端点。这不仅简化了开发过程还确保遵循合法合规的方式获取信息[^1]。 假设当前没有现成的API可供调用,则需按照如下方式操作: #### 发送HTTP请求并接收响应 ```python import requests url = 'https://www.windy.com/' # 假设URL指向所需资源的位置 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get(url, headers=headers) if response.status_code == 200: content_type = response.headers['Content-Type'] if 'application/json' in content_type.lower(): data = response.json() # 如果服务器返回的是 JSON 数据则可以直接反序列化为 Python 字典 elif 'text/html' in content_type.lower(): from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'lxml') # 进一步解析 HTML 文档以定位到具体的天气数据部分... else: print(f"Failed to retrieve page with status code {response.status_code}") ``` 这段代码展示了如何向指定网址发起GET请求以及初步判断返回的内容类型以便采取不同的处理策略。当遇到JSON格式的数据时能够立即转换成易于操作的对象;而对于HTML内容,则引入了`BeautifulSoup`来进行后续分析工作[^4]。 需要注意的是实际应用中可能涉及到更加复杂的逻辑比如登录验证、动态加载等内容,这就要求开发者具备一定的逆向工程能力去理解前端交互机制从而找到有效的解决方案[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YingCai85

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值