EarthExplorer平台TIFF文件批量下载自动化实现求助
自动化下载USGS EarthExplorer TIFF文件的实现方案
一、Selenium优化方案(针对你已尝试的工具)
- 登录环节处理:
- 复用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/") - 若需自动登录,用
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()
- 复用Chrome用户配置文件,避免重复登录。启动Driver时指定
- 分页与下载操作:
- 遍历10个页面:先定位当前页所有下载图标,点击后等待弹出选项框,选择
GeoTIFF 1 Arc-second Download对应的元素(可通过文本或CSS选择器定位),注意处理弹窗加载延迟。 - 配置Chrome默认下载目录,避免保存路径弹窗:
prefs = { "download.default_directory": r"C:\你的目标下载目录", "download.prompt_for_download": False, "download.directory_upgrade": True } options.add_experimental_option("prefs", prefs) - 跳过已下载文件:提前扫描目标目录,记录已存在的文件名,遍历数据集时跳过对应项,避免重复操作。
- 遍历10个页面:先定位当前页所有下载图标,点击后等待弹出选项框,选择
二、替代方案:使用USGS官方API(更稳定)
Selenium依赖页面元素,易受页面更新影响,推荐用USGS EarthExplorer官方API(需申请API密钥):
- 核心步骤:
- 登录USGS账号,在用户设置中生成API密钥。
- 用
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
相关产品推荐
相关产品推荐

