Python批量下载hdf数据

因为用nasa的代码总是报错,但是用浏览器下载数据是好的。

我就想用pyhton开一个浏览器,然后批量下载数据。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
import time

# 设置Edge浏览器驱动路径
edge_driver_path = 'D:/edgedriver_win64/msedgedriver.exe'

# 设置下载路径为F盘
download_path = 'F:/AET/'

# 创建Edge浏览器选项
edge_options = Options()
edge_options.add_argument(f"--download-directory={download_path}")

# 创建Edge浏览器服务
edge_service = Service(edge_driver_path)

# 启动Edge浏览器
driver = webdriver.Edge(service=edge_service, options=edge_options)

# 记录是否已经登录的标志
logged_in = False

# 读取URL列表
with open('C:/Users/Lenovo/Desktop/q.txt', 'r') as file:
    urls = file.readlines()

# 循环访问URL列表中的每个URL
for index, url in enumerate(urls):
    # 访问URL
    driver.get(url)

    # 第一个URL等待30秒
    if index == 0:
        time.sleep(60)
    elif index == len(urls) - 1:
        time.sleep(600)  # 10分钟 = 600秒

# 关闭浏览器
driver.quit()

这种方法首先要下载一个驱动,然后第一个界面会跳转到登录界面,我设置了30秒可以更改下载地址,然后输入密码和用户名。最后一个界面保持10分钟,这是因为之前总是数据没下完,代码就结束了,然后就把浏览器关了,我就想最后一次时间保持长一些,这样就可以让数据都下完。

import os

def read_txt_file1(file_path):
    with open(file_path, 'r') as file:
        return [line.strip() for line in file]
# 列出文件夹中的文件名
def list_files_in_folder(folder_path):
    return [file_name for file_name in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, file_name))]

# 对比文件名并找出差异
def find_missing_files(txt_files, folder_files):
    missing_files = []
    for file_name in txt_files:
        file_name1 = file_name.strip().split('/')[-1]
        if file_name1 not in folder_files:
            missing_files.append(file_name)
    return missing_files

# 主函数
def main():
    txt_file_path = 'C:\\Users\\Lenovo\\Desktop\\4396940367-download.txt'
    folder_path = 'D:\\AET'

    txt_files = read_txt_file1(txt_file_path)
    folder_files = list_files_in_folder(folder_path)

    missing_files = find_missing_files(txt_files, folder_files)

    if missing_files:
        print("以下文件在txt中但未在文件夹中找到:")
        for file_name in missing_files:
            # 输出txt文件中的完整文件名
            print(file_name)
    else:
        print("所有文件都成功下载!")

if __name__ == "__main__":
    main()

这段代码是用来检查有哪些文件下了,有哪些文件没下,我们从nasa下载的url通常有上千个,有可能出现下载不成功的情况,我们可以用这段代码检查,哪些没有下载成功。

import os
import arcpy

hdf_file_path="D:/AET/2023/"
tif_file_path="D:/AET/TIFF2023/"

hdf_file_name_list=os.listdir(hdf_file_path)

for hdf_file in hdf_file_name_list:
    if os.path.isdir(hdf_file_path+hdf_file):
        file_name_temp=hdf_file
        hdf_file_name_list_new=os.listdir(hdf_file_path+hdf_file)
        for hdf_file in hdf_file_name_list_new:
            tif_file_name=hdf_file[10:25]+".tif"
            data=arcpy.ExtractSubDataset_management(hdf_file_path+file_name_temp+'/'+hdf_file,tif_file_path+tif_file_name,"0;1;2")
    else:
            tif_file_name=hdf_file[10:25]+".tif"
            data=arcpy.ExtractSubDataset_management(hdf_file_path+hdf_file,tif_file_path+tif_file_name,"0;1;2")

最后就是将下载的hdf转栅格。

其实转完栅格之后可以直接拼接,但是我比较懒用arcmap拼接加投影。。。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值