简单易上手——Python批量下载哨兵1号精密轨道文件

获取哨兵数据的精密轨道文件可以去ASF官网:
在这里插入图片描述
也可以在下面网站下载:https://scihub.copernicus.eu/gnss/#/home

在这里插入图片描述
上述方法比较伤身体,对眼睛不是很友好!也比较费工夫,因而使用python爬虫下载可以极大的提高我们的效率。在csdn查找了相关博文,最后修改出下面简单版下载方式,注意的事项有:
1、复制代码后下载需要的包:(没有包会报错,缺什么使用pip下载即可)

	  pip install urllib.parse
	  pip install bs4
	  pip install pandas
	  pip install datatime
	  pip install dateutil.parser
	  pip install xlrd

2、在网页打开https://s1qc.asf.alaska.edu/aux_poeorb/网站,按F12搜索network->all->cookie,复制替换代码中的cookie
3、更换存换轨道文件夹位置
4、将NeedTimeArray=[ ]更换为自己的影像下载时间
5、运行代码下载

from urllib.parse import urlparse
import urllib.request
from bs4 import BeautifulSoup
import re
import pandas
import os
import datetime
from dateutil.parser import parse
import requests
import xlrd  #注意 xlrd1.2.0版本支持对旧版excel格式的读取,默认pip为新版2.0.1
import tkinter as tk
from tkinter import filedialog

""" Notice
本代码爬取轨道数据来自于网站:https://s1qc.asf.alaska.edu/aux_poeorb/
代码需要更改地方有:
1.存放轨道数据文件夹位置
2.将网页cookie信息替换
3.将NeedTimeArray=[]更换为自己的影像下载时间
注意:download下的headers数组里存放的实际上轨道数据的网站信息,这个根据电脑版本(win10,win11)或平台(window,OS)要进行小调
"""
timestart = datetime.datetime.now()
def download(dest_dir, url,cookie_path):
    print(url)
    print(dest_dir)
    headers={
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Connection": "keep-alive",
        "Cookie" : ' _gid=GA1.2.734766719.1688478855; _ce.clock_event=1; _ce.clock_data=2049%2C124.152.131.7%2C1%2C8e224eb087028595fdc66007ba5a1298; asf-urs=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmaXJzdF9uYW1lIjoiXHU1ZmI3XHU5Zjk5IiwibGFzdF9uYW1lIjoiXHU1ZjIwIiwidXJzLXVzZXItaWQiOiJ6aGFuZ2RlbG9uZyIsInVycy1hY2Nlc3MtdG9rZW4iOiJleUowZVhBaU9pSktWMVFpTENKdmNtbG5hVzRpT2lKRllYSjBhR1JoZEdFZ1RHOW5hVzRpTENKemFXY2lPaUpsWkd4cWQzUndkV0pyWlhsZmIzQnpJaXdpWVd4bklqb2lVbE15TlRZaWZRLmV5SjBlWEJsSWpvaVQwRjFkR2dpTENKamJHbGxiblJmYVdRaU9pSkNUMTl1TjI1VVNXeE5iR3BrZGxVMmExSlNRak5uSWl3aVpYaHdJam94TmpreE1EY3hOamN3TENKcFlYUWlPakUyT0RnME56azJOekFzSW1semN5STZJa1ZoY25Sb1pHRjBZU0JNYjJkcGJpSXNJblZwWkNJNklucG9ZVzVuWkdWc2IyNW5JbjAucENRSExXMlhyR0FxdjlfVHo1eExJYmZWcHhRdjZrR3dNLTVCUEtYQlBIZ3llbDRnNHBhVk9BTlM1bTRicl9PRGZSblZJQkZacmxHVU5fb2dkQjNxdHVhTHV4M2ZYU3h2WVRYZk1uQXZKU1RiSGxjMzEyQ21pRS1COUw3bkZ1RGt2cVhHMi1XYndwYWdoaWZmX0dzQktUcG5IQTRVMUMzTWdlbV9EWjlmS2g4WlNTcjVvYWJoTUtoUi1RM0JxWU1RUFJVYXI5VjF5d1B3SWdzVXhmOHAzdVRCcDRLTnBtS0F5WUtlLUo4alU3MF9Tc29URW1sQUlwN0tXc2FlcWhKYWRaeUVQbFdVNGhQWTZwQW9ISzQ3V1JBdE5UNlFnczhZOW1XUHNGZHRkVGZRU2JhODNGWnE2VlkwYW5FRDQ2VDBIRGUyMHp0TngwUzNSY1hua19SQnNBIiwidXJzLWdyb3VwcyI6W10sImlhdCI6MTY4ODQ3OTY3MSwiZXhwIjoxNjg5MDg0NDcxfQ.wPH9jusO6oWyBfg4YcCVAIt_tzNKlWB5x5k7jidDkgx4aA_tnyk8xqDGsbSaI82vJmD9wHL-AiiclUpHC2VTkFwOLmCF7Xou-3bx7Og5hLIUuLj-1tOR4YokOXO8T2UlbV9wo2i-tE3c2RqJKB4gSZ0B1oz5ZszZlUQioxIT2o9912InOhJ4kwOyE-B1kFr7po607ugSXxjpdZSGcLG7J07BMmQz-5NcqT0ae0VPvKMsBFCyY-RxWPXx7nr7Jh21yrGlcifnw1_f3fUEMzT0ir2Q8d-8CQkb6wCO9SHSnSXt0gWoYodMQbvuBD-G5J3mzr_l7W-wrprEb5cfbnasg9bde1ZWUpNU-xt6vOLm2Bk23sx-nb2WPC4DRRRiKFbEjCpxYFaDivPR_BObE1ynw1RbIvXkbxz4_Z1jf8cppWtgGeNUgT7cfQ8kL2WTfqqeeTd8N-vsrRyCeX5H6PSjBkyA2_rGHbYfTAYtmvsNw1TEcw82KjxnzKGDxDb3MbTb9R_5zMutPlegs6pHri_z3UXevLIdMosn-Brsz_e_c2yKH-4Jy_gTl7iDgtU_jZEa1R_ggriL3htCRK5JO-4zs6fNOrXWBsJZwtGxdFNWWLdoBPY0U11-tAOn9pss7dztuM0cPDY8ptnk3MnVrBoWjTdgXTEkLSrP2_yBDxgKmxo; urs-user-id=zhangdelong; urs-access-token=eyJ0eXAiOiJKV1QiLCJvcmlnaW4iOiJFYXJ0aGRhdGEgTG9naW4iLCJzaWciOiJlZGxqd3RwdWJrZXlfb3BzIiwiYWxnIjoiUlMyNTYifQ.eyJ0eXBlIjoiT0F1dGgiLCJjbGllbnRfaWQiOiJCT19uN25USWxNbGpkdlU2a1JSQjNnIiwiZXhwIjoxNjkxMDcxNjcwLCJpYXQiOjE2ODg0Nzk2NzAsImlzcyI6IkVhcnRoZGF0YSBMb2dpbiIsInVpZCI6InpoYW5nZGVsb25nIn0.pCQHLW2XrGAqv9_Tz5xLIbfVpxQv6kGwM-5BPKXBPHgyel4g4paVOANS5m4br_ODfRnVIBFZrlGUN_ogdB3qtuaLux3fXSxvYTXfMnAvJSTbHlc312CmiE-B9L7nFuDkvqXG2-Wbwpaghiff_GsBKTpnHA4U1C3Mgem_DZ9fKh8ZSSr5oabhMKhR-Q3BqYMQPRUar9V1ywPwIgsUxf8p3uTBp4KNpmKAyYKe-J8jU70_SsoTEmlAIp7KWsaeqhJadZyEPlWU4hPY6pAoHK47WRAtNT6Qgs8Y9mWPsFdtdTfQSba83FZq6VY0anED46T0HDe20ztNx0S3RcXnk_RBsA; _ga=GA1.2.697948729.1688478855; _ce.s=v~577e603592279fbf00565edaeade0a95c4801edf~lcw~1688561973870~vpv~1~v11.rlc~1688561973872~lcw~1688561973872; _ga_XCPHL9DW7E=GS1.1.1688563933.5.0.1688563933.0.0.0',
        "Host": "s1qc.asf.alaska.edu",
        "Referer": "https://s1qc.asf.alaska.edu/aux_poeorb/?sentinel1__mission=S1A&validity_start=2019-01-01",
        "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"96\", \"Google Chrome\";v=\"96\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows \"",
        "Sec-Fetch-Dest": "document",
        "Sec-Fetch-Mode": "navigate",
        "Sec-Fetch-Site": "same-origin",
        "Sec-Fetch-User": "?1",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36",
    }
    #请求下载
    try:
        request = urllib.request.Request(url,headers=headers)
        response = urllib.request.urlopen(request)
        f = open(dest_dir ,"w")
        lines = response.readlines()
        for line in lines:
            f.write(line.decode())
        f.close()
    except:
        error_url.append(url)
        print("\tError retrieving the URL:", dest_dir)
    else: # 没有异常
        if url in error_url: #在错误列表里
            error_url.remove(url)
#影像下载时间,按照自己需求更改
NeedTimeArray = [
20190607,
......
]

if __name__ == '__main__':
    #创建调用文件夹所需对象
    root=tk.Tk()
    root.withdraw()
    error_url = []  #存放下载出错的文件名

    cookie_path = r'E:\InSAR\LX_SBAS\2019\POEORB_download\cookie.txt' #cookie文件位置
    out_path = r'E:\InSAR\LX_SBAS\2019\POEORB_download' #轨道文件输出位置
    #该处可以自己选择文件夹,使用下面两行代码
    # out_path=filedialog.askdirectory() #选择文件夹
    # cookie_path=filedialog.askopenfilename() #直接选择cookie文件

    url_param_json = {}
    url_param_json['sentinel1__mission'] = 'S1A'

    date = '2019-01-01' #开始搜寻日期
    url_param_json['validity_start'] = date

    # 获得EOF下载网址
    url_param = urllib.parse.urlencode(url_param_json) #url参数
    url = 'https://s1qc.asf.alaska.edu/aux_poeorb/?%s' % url_param #拼接
    html=requests.get(url).content
    dom = BeautifulSoup(html,"lxml") # 解析html文档
    a_list = dom.findAll("a")  # 找出<a>
    eof_lists = [a['href'] for a in a_list if a['href'].endswith('.EOF')]  # 找出EOF
    TimeArray=[] # 存放网站爬取EOF文件的时间信息
    #NeedTimeArray = read_excel(out_path) # 存放下载数据的时间信息
    for eof in eof_lists:

        #截取轨道文件的时间信息
        if os.path.splitext(eof)[1] == ".EOF" and os.path.basename(eof)[0:3] == 'S1A':  # 后缀是eof且前缀前三个字符为S1A
            SplitEOF = re.split(r'[_,.,\s ]\s*', eof) #将EOF文件分割
            SplitTime = SplitEOF[-2] #分割列表中取表中最后一个日期
            Time = parse(SplitTime)  #转换成时间格式
            NeedTime = Time+datetime.timedelta(days=-1)  # 转换成所需时间
            NeedTimeNum =(re.sub('[-,:, ]','',str(NeedTime)))[0:8] #将时间格式转换成需要的数字格式,sub为去除字符串中符号
            if NeedTimeNum in str(NeedTimeArray ):
                TimeArray.append(NeedTimeNum) # 存放准备下载的时间
                savefile = os.path.join(out_path,eof)
                download(savefile,'https://s1qc.asf.alaska.edu/aux_poeorb/'+eof,cookie_path)
                print ("------------------------------------")
                print("精密轨道数据下载完成")
                print("------------------------------------")
                if len(TimeArray) == len(NeedTimeArray):
                    print("所需精密轨道数据下载完成,共计%d个文件" %(len(TimeArray)))
                    print("------------------------------------")
                    break
            else :
                continue

    # 下载出错的数据重新下载
    while len(error_url)!=0:
        print ("开始下载出错的数据")
        print("------------------------------------")
        print("出错的数据有")
        print(error_url)
        for eof in error_url:
            savefile = os.path.join(out_path, eof[50:])
            download(savefile, eof,cookie_path)

    timeend = datetime.datetime.now()
    print('Running time: %s Seconds'%(timeend-timestart))

该代码下载结果如图:
在这里插入图片描述
代码主要参考来源:https://blog.csdn.net/qq_44932630/article/details/124202144

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python编程快速上,让繁琐工作自动化》是一本非常实用的书籍,提供了快速入门Python编程的指导,帮助读者实现繁琐工作的自动化。这本书的作者以简明易懂的方式介绍了Python编程语言的基础知识,包括变量、循环、条件判断等等。读者可以通过学习这些基础知识,逐渐掌握Python编程的技巧和方法。 在书中,作者还介绍了一些常用的Python库和模块,例如OpenPyXL、Selenium等,这些库和模块可以帮助读者实现各种自动化任务。例如,通过OpenPyXL库,可以方便地对Excel文件进行读写操作;通过Selenium库,可以自动化地进行网页操作,如自动填写表单、点击按钮等。这些工具可以极大地提高工作效率,减少重复性的劳动,让读者从繁琐的工作中解放出来。 除了基础知识和常用库的介绍,书中还提供了一些实际案例,通过实例的讲解,读者可以更好地理解和应用Python编程。这些案例涵盖了各个领域,如数据分析、网络爬虫、自动化测试等,读者可以根据自己的需要选择学习和实践。 总的来说,这本《Python编程快速上,让繁琐工作自动化》是一本很好的学习资源,不仅适合想要入门Python编程的初学者,也适合已经掌握一定Python知识的人进一步提高。通过学习这本书,读者可以轻松地掌握Python编程,并且利用Python实现工作的自动化,提高工作效率。建议有需要的读者可以下载阅读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值