You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EarthExplorer平台TIFF文件批量下载自动化实现求助

自动化下载USGS EarthExplorer TIFF文件的实现方案

一、Selenium优化方案(针对你已尝试的工具)

  • 登录环节处理:
    1. 复用Chrome用户配置文件,避免重复登录。启动Driver时指定user-data-dir参数,第一次手动登录后,后续启动会自动保持会话:
      from selenium import webdriver
      from selenium.webdriver.chrome.options import Options
      
      options = Options()
      # 替换为你的Chrome用户数据目录路径
      options.add_argument(r"user-data-dir=C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data")
      driver = webdriver.Chrome(options=options)
      driver.get("https://earthexplorer.usgs.gov/")
      
    2. 若需自动登录,用WebDriverWait等待元素加载,避免定位失败:
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      from selenium.webdriver.common.by import By
      
      wait = WebDriverWait(driver, 10)
      username_input = wait.until(EC.presence_of_element_located((By.ID, "username")))
      username_input.send_keys("你的USGS账号")
      password_input = wait.until(EC.presence_of_element_located((By.ID, "password")))
      password_input.send_keys("你的密码")
      login_btn = wait.until(EC.element_to_be_clickable((By.ID, "login-button")))
      login_btn.click()
      
  • 分页与下载操作:
    1. 遍历10个页面:先定位当前页所有下载图标,点击后等待弹出选项框,选择GeoTIFF 1 Arc-second Download对应的元素(可通过文本或CSS选择器定位),注意处理弹窗加载延迟。
    2. 配置Chrome默认下载目录,避免保存路径弹窗:
      prefs = {
          "download.default_directory": r"C:\你的目标下载目录",
          "download.prompt_for_download": False,
          "download.directory_upgrade": True
      }
      options.add_experimental_option("prefs", prefs)
      
    3. 跳过已下载文件:提前扫描目标目录,记录已存在的文件名,遍历数据集时跳过对应项,避免重复操作。

二、替代方案:使用USGS官方API(更稳定)

Selenium依赖页面元素,易受页面更新影响,推荐用USGS EarthExplorer官方API(需申请API密钥):

  • 核心步骤:
    1. 登录USGS账号,在用户设置中生成API密钥。
    2. 用requests调用API,先获取目标数据集的ID列表,再调用下载接口获取文件链接,直接下载:
      import requests
      
      API_KEY = "你的API密钥"
      BASE_URL = "https://earthexplorer.usgs.gov/inventory/json/v/1.4.0"
      
      # 搜索获取数据集ID(根据你的区域、数据集类型调整参数)
      search_params = {
          "jsonRequest": {
              "apiKey": API_KEY,
              "datasetName": "对应数据集名称",
              "bbox": [你的区域边界坐标],
              # 其他过滤条件(如时间范围)
          }
      }
      search_res = requests.post(f"{BASE_URL}/search", json=search_params)
      dataset_ids = [item["entityId"] for item in search_res.json()["data"]["results"]]
      
      # 批量下载
      for dataset_id in dataset_ids:
          download_params = {
              "jsonRequest": {
                  "apiKey": API_KEY,
                  "entityIds": [dataset_id],
                  "product": "GeoTIFF 1 Arc-second",
                  "format": "json"
              }
          }
          download_res = requests.post(f"{BASE_URL}/download", json=download_params)
          download_url = download_res.json()["data"][0]["url"]
          # 流式下载文件
          with open(f"C:/下载目录/{dataset_id}.tif", "wb") as f:
              for chunk in requests.get(download_url, stream=True).iter_content(chunk_size=8192):
                  f.write(chunk)
      
  • 优势:API调用稳定性远高于模拟浏览器,不受页面布局变更影响,下载速度更快。

三、同类项目参考思路

  • 优先采用官方API实现,避免依赖前端元素定位;
  • Selenium实现的项目通常会封装元素定位方法(如XPath/CSS选择器),并加入分页等待、重试机制(比如用tenacity库处理网络波动);
  • 会加入文件校验逻辑,对比已下载文件大小或哈希值,确保下载完整性。

内容的提问来源于stack exchange,提问作者Ayub Indra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:20:21