使用Python+Chrome浏览器批量下载Ocean Color上遥感数据

本文介绍了一种使用Python和selenium库解决EarthData下载验证问题的方法,通过模拟浏览器行为实现批量下载OceanColor数据,包括登录过程和链接调度策略,适用于数据科学家和遥感工程师.
摘要由CSDN通过智能技术生成

目录

1.前言
2.主要思路及代码
3.结果展示

建了一个QQ群,大家可以在里边聊聊水色遥感数据下载和数据处理方面的事情:1087024529

1.前言

最近遇见一个很尴尬的事情。之前写过用IDM批量下载Ocean Color上的数据(这里不放链接了,有兴趣的朋友去我的博客主页上逛逛),但是最近不知道怎么回事,在IDM中配置好用户名和密码有时候能成功下载数据,但是有时候会提示验证失败,无法下载(令人生气,可能是网络限制的问题)。使用IDM下载Earth Data上的数据可能都会出现该问题。目前想到了一个解决办法,这里分享给大家。

2.主要思路及代码

使用python+selenium调用Chrome浏览器进行下载。在操作之前,当然需要按照selenium库。还需要配置Chrome浏览器,让selenium能够调用它,配置步骤可以参考我之前的博客:使用Python自动化、批量化的下载LAADS上的数据
selenium库我这里用的是3.141.0版本。关于浏览器,我本来是想使用Edge浏览器的,但是selenium调用Edge浏览器的时候,我不知道如何指定下载数据的默认文件夹,因此这里使用了Chrome。

安装好要用的工具后,让我们来梳理下载思路。当我们有一个ocean color数据下载链接时(要想批量下载数据,还得需要会获得大量的数据下载链接),把它放在浏览器地址栏后,其实会首先跳到登录界面。在你输入用户名和密码成功登录后,浏览器重定位到数据下载链接,然后会自动下载数据。这样下载思路就有了:
1.python+selenium自动完成earth data的用户登录;
2.在浏览器地址栏不断填入数据下载链接,完成下载。
在这里插入图片描述
主要的代码挺短的,用户名密码替换成你自己的,具体的步骤可参考代码:

#-*-coding: utf-8-*-  
#@Author: zhaohaiyang
#@E-mail: hyzhao_rs@163.com
#使用python操作chrome
#下载oceancolor的数据
#
#
################################################


import os
from time import sleep
from selenium import webdriver

#配置selenium的参数
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0,      #指定不弹出窗口
         'download.default_directory': 'H:\\downloadData'   #指定下载路径,注意使用双反斜杠
        }
options.add_experimental_option('prefs', prefs)
driver=webdriver.Chrome(chrome_options=options)
driver.get('https://urs.earthdata.nasa.gov/')

username = driver.find_element_by_id("username")
password = driver.find_element_by_id("password")
username.send_keys("用户名")   #程序在username文本框中填入用户名
password.send_keys("密码")     #程序在password文本框中填入密码
driver.find_element_by_name("commit").click() #程序自动点击Log In按钮,完成用户登录
datalink='G:/SOS/olci_202105_oceancolor_link.txt'  #数据下载链接文档
with open(datalink,'r') as fr:
    urlList=fr.readlines()
    n=0
    for url in urlList:
        driver.get(url)   #程序不断的在浏览器地址栏填入下载链接
        n=n+1
        if n%4!=0:
            sleep(30)
        else:
            sleep(150)
    
    sleep(10000)
    
    driver.quit()

在代码中,我设置了在浏览器地址栏填入一个链接就让程序休息30秒,每填入4个数据链接就休息150秒,这是因为程序不会等待浏览器下载完已有的数据才进行下一个,所以需要让程序休息一会,防止浏览器同时下载的数据过多造成下载失败(根据需要自己设置)。
在数据链接全部填入浏览器后,让程序休息10000再退出浏览器,确保数据完全下载完成(根据需要自己设置)。
我这里数据下载链接的文本文档的样式如下(其实就是每一行一个数据链接):

https://oceandata.sci.gsfc.nasa.gov/sentinel/getfile/S3A_OL_1_EFR____20200501T011005_20200501T011305_20200502T043959_0179_057_359_2340_LN1_O_NT_002.zip
https://oceandata.sci.gsfc.nasa.gov/sentinel/getfile/S3A_OL_1_EFR____20200501T011305_20200501T011605_20200502T044021_0179_057_359_2520_LN1_O_NT_002.zip
https://oceandata.sci.gsfc.nasa.gov/sentinel/getfile/S3A_OL_1_EFR____20200501T025104_20200501T025404_20200502T062156_0179_057_360_2340_LN1_O_NT_002.zip
https://oceandata.sci.gsfc.nasa.gov/sentinel/getfile/S3A_OL_1_EFR____20200502T022153_20200502T022453_20200503T054151_0179_057_374_2160_LN1_O_NT_002.zip
https://oceandata.sci.gsfc.nasa.gov/sentinel/getfile/S3A_OL_1_EFR____20200502T022453_20200502T022753_20200503T054214_0179_057_374_2340_LN1_O_NT_002.zip
https://oceandata.sci.gsfc.nasa.gov/sentinel/getfile/S3A_OL_1_EFR____20200502T022753_20200502T023053_20200503T054237_0179_057_374_2520_LN1_O_NT_002.zip
https://oceandata.sci.gsfc.nasa.gov/sentinel/getfile/S3A_OL_1_EFR____20200503T015542_20200503T015842_20200504T064438_0179_058_003_2160_LN1_O_NT_002.zip
https://oceandata.sci.gsfc.nasa.gov/sentinel/getfile/S3A_OL_1_EFR____20200503T015842_20200503T020142_20200504T064458_0179_058_003_2340_LN1_O_NT_002.zip

3.结果展示

注意看页面底部,数据已经加入到浏览器中开始下载了。
在这里插入图片描述
下载速度也挺好:
在这里插入图片描述
开心下载吧!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值