基于Python爬取NOAA站点美国多县近3年日出日落数据的技术求助
爬取NOAA Solcalc日出日落数据的实现方案
1. 准备坐标数据
先把你手上的美国各县坐标整理成CSV文件(命名为counties_coords.csv),格式示例如下:
latitude,longitude 37.7749,-122.4194 # 旧金山示例坐标 40.7128,-74.0060 # 纽约示例坐标
2. 安装依赖库
执行以下命令安装所需工具:
pip install requests pandas python-dateutil
3. 核心代码实现
以下代码会自动遍历所有坐标、生成近3年的每日日期,请求NOAA接口获取数据并整理成你需要的格式:
import requests import pandas as pd from datetime import datetime, timedelta import time # 读取坐标列表 coords_df = pd.read_csv('counties_coords.csv') # 定义时间范围:近3年 end_date = datetime.today() start_date = end_date - timedelta(days=3*365) date_list = pd.date_range(start=start_date, end=end_date, freq='D') # 存储结果 output_data = [] # 遍历坐标和日期 for idx, coord in coords_df.iterrows(): lat = coord['latitude'] lon = coord['longitude'] for dt in date_list: # 构造请求参数 query_params = { 'lat': lat, 'lon': lon, 'year': dt.year, 'month': dt.month, 'day': dt.day, 'tz': 'America/New_York', # 按需修改时区,比如America/Los_Angeles 'format': 'json' } # 发送请求(添加延时避免触发接口限制) time.sleep(1) res = requests.get('https://gml.noaa.gov/grad/solcalc/calcdetails.json', params=query_params) if res.status_code == 200: sol_data = res.json() # 提取所需字段并添加到结果列表 output_data.append({ 'latitude': lat, 'longitude': lon, 'year': dt.year, 'month': dt.month, 'day': dt.day, 'Sunrise': sol_data['sunrise'], 'Sunset': sol_data['sunset'] }) else: print(f"Failed to fetch data for ({lat}, {lon}) on {dt.date()}") # 保存为指定分隔符的CSV文件 result_df = pd.DataFrame(output_data) result_df.to_csv('sunrise_sunset_results.csv', index=False, sep='|') print("Data saved to sunrise_sunset_results.csv")
4. 重要提示
- 时区设置:
tz参数需使用IANA时区标识符,美国常用的有America/Chicago、America/Phoenix等,根据数据需求调整。 - 请求限制:NOAA公开接口存在请求频率限制,
time.sleep(1)是必要的,避免IP被临时封禁。 - 测试验证:建议先拿1-2个坐标、1个月的日期做小范围测试,确认数据格式正确后再跑全量数据。
内容的提问来源于stack exchange,提问作者crawling_ec
相关产品推荐
相关产品推荐

