批量下载叶绿素a的方法
直达下载链接:OPeNDAP Hyrax: Contents of /MODISA/
图1
以上(图1)下载的为例子
点击后出现图2↓
图2
1.选择下载文件形式
2.①点get data是手动下载
②复制下载链接后修改日期可以直接批量下载,python代码如下
ps:可以让AI批量修改url部分,一般要修改的只有画框的部分(见图3)
图2
import os import requests # ===================== 1. 保存路径 ===================== save_dir = r"D:\叶绿素-原始数据\modis\MODISA-CHLA\daily" if not os.path.exists(save_dir): os.makedirs(save_dir) # ===================== 2. 下载链接 ===================== urls = [ "http://oceandata.sci.gsfc.nasa.gov/opendap/MODISA/L3SMI/2017/0203/AQUA_MODIS.20170203.L3m.DAY.CHL.chlor_a.4km.nc.dap.nc4", "http://oceandata.sci.gsfc.nasa.gov/opendap/MODISA/L3SMI/2017/0502/AQUA_MODIS.20170502.L3m.DAY.CHL.chlor_a.4km.nc.dap.nc4", "http://oceandata.sci.gsfc.nasa.gov/opendap/MODISA/L3SMI/2017/0504/AQUA_MODIS.20170504.L3m.DAY.CHL.chlor_a.4km.nc.dap.nc4", ] # ===================== 3. 批量下载 ===================== for i, url in enumerate(urls, start=1): filename = url.split("/")[-1] save_path = os.path.join(save_dir, filename) if os.path.exists(save_path): print(f"[{i}/{len(urls)}] 已存在,跳过:{filename}") continue print(f"[{i}/{len(urls)}] 正在下载:{filename}") try: response = requests.get(url, stream=True, timeout=60) response.raise_for_status() with open(save_path, "wb") as f: for chunk in response.iter_content(chunk_size=1024 * 1024): if chunk: f.write(chunk) print(f" 下载完成:{save_path}") except Exception as e: print(f" 下载失败:{filename}") print(f" 原因:{e}") print("全部下载任务结束。")可能以上的问题
1.怎么下载requests
在终端用pip下载:pip install requests
2.有没有更方便的代码直接批量下载xxxx年x月x日-xxxx年x月x日的数据
import os import requests from datetime import datetime, timedelta # ===================== 1. 保存路径 ===================== save_dir = r"D:\叶绿素-原始数据\modis\MODISA-CHLA\重新下载2019-2025" if not os.path.exists(save_dir): os.makedirs(save_dir) # ===================== 2. 下载时间范围 ===================== start_date = datetime(2019, 1, 1) end_date = datetime(2025, 3, 1) # 是否覆盖已有文件 # 如果你是为了恢复被覆盖/异常的数据,建议设为 True overwrite = True # ===================== 3. 自动拼接下载链接 ===================== urls = [] current_date = start_date while current_date <= end_date: yyyy = current_date.strftime("%Y") # 例如 2022 mmdd = current_date.strftime("%m%d") # 例如 0402 yyyymmdd = current_date.strftime("%Y%m%d") # 例如 20220402 url = ( f"http://oceandata.sci.gsfc.nasa.gov/opendap/MODISA/L3SMI/" f"{yyyy}/{mmdd}/" f"AQUA_MODIS.{yyyymmdd}.L3m.DAY.CHL.chlor_a.4km.nc.dap.nc4" ) urls.append(url) current_date += timedelta(days=1) print(f"共生成下载链接数:{len(urls)}") # ===================== 4. 批量下载 ===================== for i, url in enumerate(urls, start=1): filename = url.split("/")[-1] save_path = os.path.join(save_dir, filename) if os.path.exists(save_path): if overwrite: os.remove(save_path) print(f"[{i}/{len(urls)}] 已删除旧文件,重新下载:{filename}") else: print(f"[{i}/{len(urls)}] 已存在,跳过:{filename}") continue print(f"[{i}/{len(urls)}] 正在下载:{filename}") try: response = requests.get(url, stream=True, timeout=120) response.raise_for_status() with open(save_path, "wb") as f: for chunk in response.iter_content(chunk_size=1024 * 1024): if chunk: f.write(chunk) print(f" 下载完成:{save_path}") except Exception as e: print(f" 下载失败:{filename}") print(f" URL:{url}") print(f" 原因:{e}") print("全部下载任务结束。")