因为用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拼接加投影。。。