Python批量获取精密轨道数据

前两天因为要做时序处理,需要的精密轨道数据很多,一个一个筛选很耗时耗力,所以作者就写了一个批量获取精密轨道数据的程序,供大家参考使用。

目录

一、精密轨道下载网址

二、程序使用的注意事项

三、cookie的获取以及csv文件的编写保存

1、cookie的获取

2、csv文件的编写与保存

四、更改re(在get_info_href()函数)

五、文件下载保存的文件夹

六、注意事项

七、批量获取精密轨道数据代码

一、精密轨道下载网址

二、程序使用的注意事项

 

1、该程序获取的为'https://s1qc.asf.alaska.edu/aux_poeorb/'这个网站上的数据
2、需要写一个csv文件,在csv文件的第一列往下开始写影像下载时间
3、该程序需要更改的第一个地方为'get_info_href()'和'DownLoad_POD()'这两个函数里面的cookie属性
4、需要改re表达式里面的S1A\SAB
5、该程序需要更改的第二个地方为'get_data_time()'函数下的csv文件的路径,例如:'D:\python\datatime.csv'
6、该程序下载精密轨道数据的路径为该程序运行下面的POD文件夹,程序会自己创建,路径在输出窗口也会出现

三、cookie的获取以及csv文件的编写保存

1、cookie的获取

(1)首先我们先打开网址,按鼠标右键点击检查或者F12开发者工具,点击到上面的Network

(2)键盘按ctrl+r,点击aux_poeorb/里面的Headers,鼠标下拉找到Cookie,点击复制,粘贴到程序里面。('get_info_href()'和'DownLoad_POD()'这两个函数里面的cookie属性)

2、csv文件的编写与保存

(1)打开excel文件,在其第一列写入数据,数据为影响日期

(2)保存数据,在保存数据时选择CSV UTF-8文件类型

(3)在程序中输入该文件保存的路径(在get_datatime()函数里面)

四、更改re(在get_info_href()函数)

根据要下载的卫星型号来更改S1A\S1B

五、文件下载保存的文件夹

该程序下载精密轨道数据的路径为该程序运行下面的POD文件夹,程序会自己创建,路径在输出窗口也会出现 

六、注意事项

作者试验了25个数据,亲测可行,但时间为什么用了267秒,按理说程序运行应该很快。

这是因为在程序里面我们运用了两个sleep(2)代码,这就意味着25个文件需要100秒才能访问完,实际我们运行了167秒,这个时间还是可行的。

为什么要睡眠2秒,这个可以帮助我们在访问网站时频率降低,防止网站对我们进行禁止访问,是个很实用的方法。

有时候网站会不稳定,可能需要文明上网,但大部分时间都是不需要的。

如果有时候科学上网也解决不了,按找cookie的方法,里面有个参数User-Agent,替换我们get_info_href()和DownLoad_POD()函数里面的User-agent。

当然这种情况毕竟较少见,如果遇到可以尝试这种方法。

七、批量获取精密轨道数据代码

from urllib.request import Request,build_opener
from urllib.error import URLError
from my_fake_useragent import UserAgent
from time import sleep
import re
import datetime
import pandas
import os
from dateutil.parser import parse
'''
1、该程序获取的为'https://s1qc.asf.alaska.edu/aux_poeorb/'这个网站上的数据
2、需要写一个csv文件,在csv文件的第一列往下开始写影像下载时间
3、该程序需要更改的第一个地方为'get_info_href()'和'DownLoad_POD()'这两个函数里面的cookie属性
4、该程序需要更改的第二个地方为'get_data_time()'函数下的csv文件的路径,例如:'D:\python\datatime.csv'
5、该程序下载精密轨道数据的路径为该程序运行下面的POD文件夹,程序会自己创建,路径在输出窗口也会出现
'''
def get_info_href():#利用正则表达式获取每个具体精轨数据的网址
    try:
        ua=UserAgent(family='chrome')
        UA=ua.random() # 设置虚拟代理
        headers={'User-Agent':UA,
               'Cookie':'_ga=GA1.2.649753142.1634525068; _ce.s=v11.rlc~1634525094488; asf-urs=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmaXJzdF9uYW1lIjoiXHU3ZDIyIiwibGFzdF9uYW1lIjoiXHU4Zjg5IiwidXJzLXVzZXItaWQiOiJzdW96aGlodWkiLCJ1cnMtYWNjZXNzLXRva2VuIjoiZXlKMGVYQWlPaUpLVjFRaUxDSnZjbWxuYVc0aU9pSkZZWEowYUdSaGRHRWdURzluYVc0aUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SjBlWEJsSWpvaVQwRjFkR2dpTENKamJHbGxiblJmYVdRaU9pSkNUMTl1TjI1VVNXeE5iR3BrZGxVMmExSlNRak5uSWl3aVpYaHdJam94TmpVek1qQXlOekF4TENKcFlYUWlPakUyTlRBMk1UQTNNREVzSW1semN5STZJa1ZoY25Sb1pHRjBZU0JNYjJkcGJpSXNJblZwWkNJNkluTjFiM3BvYVdoMWFTSjkuWHRKa2k4QkcxUFpUSWd0Um03UlN6ZUlOM0FhTWhfSmtjUF91bnhmbHB4WSIsInVycy1ncm91cHMiOltdLCJpYXQiOjE2NTA2MTA3MDIsImV4cCI6MTY1MTIxNTUwMn0.W8Ygb7kVfDO0FFi0i0-zyPCthRD2owCAiBbGawRBvnlcMYS7K5eBsWyYClgHGFfiHtVS83CdYQvZG3g06a1gGPMzqfWqEu55LqcGN-CRNdXt6NeR0a-Ybf9_NQU_TGQNke4xFWx9bOp6LOJXmxUmhTsb4N7ESUqSJccGzPXnr3izZVc1Hqzl-Oiath43mTSRL-nFVJA5V9NpiksbufND4rvxSWa6D5fV63n1pw-uFwola92C86GBaSZo5mKcSLP4llvUktDQViVkZClWde6UtuWsnds7ABIMps9CZj7KBH7jlOWGDkc_Jq0UAeeSzY0ZCYm0zfd0jkWJ3YjehgSH_SlGSStu_H0DELLnPcOXoyhg2QgrmgABbU5YQ-Y0SR95XQCFnauXK_g1nPpHQ3REChPZ7cNPNkjNb1Nqep_D0AfS3TerMw8t_yKSJ9t-sF_ydArhF4IH1yjNSV5aza69vkVtL5dQZLFUQp8nkjURg9dQy5vXS6Q7tbZTMnKj1borHW-uzXZiQ4G5LhsWGRLnpCqheC7IvqrVu2LzhnthD0UMFer2RLMVWPkYQ1jyCxmDV-u15Jt3j7f5sryyV-HSLqt_4Dv2WERX1d4Y-IGsxamxILA3I8f8NlhNfgFKMG8J2bAlF53rupfr6BsQRKfS9LCXzxpMcwn8xeZSL2Okhoc; urs-user-id=suozhihui; urs-access-token=eyJ0eXAiOiJKV1QiLCJvcmlnaW4iOiJFYXJ0aGRhdGEgTG9naW4iLCJhbGciOiJIUzI1NiJ9.eyJ0eXBlIjoiT0F1dGgiLCJjbGllbnRfaWQiOiJCT19uN25USWxNbGpkdlU2a1JSQjNnIiwiZXhwIjoxNjUzMjAyNzAxLCJpYXQiOjE2NTA2MTA3MDEsImlzcyI6IkVhcnRoZGF0YSBMb2dpbiIsInVpZCI6InN1b3poaWh1aSJ9.XtJki8BG1PZTIgtRm7RSzeIN3AaMh_JkcP_unxflpxY'}
        url='https://s1qc.asf.alaska.edu/aux_poeorb/' # 请求网址
        time=get_datetime() # 运行get_datatime()函数,返回时间
        day = datetime.timedelta(days=1)#确定day参数,让day=1
        href=[] # 设置空列表,用来存储精轨网址
        for i in time: # 对返回来的时间进行遍历
            # str为正则表达式,用来识别数据,记得更改S1A\S1B,int((i-day).strftime("%Y%m%d"))和int((i+day).strftime("%Y%m%d"))根据精轨命名规则计算前一天和后一天日期
            str=f'S1A_OPER_AUX_POEORB_OPOD_\d+\w\d+_\w{int((i-day).strftime("%Y%m%d"))}\w\d+_{int((i+day).strftime("%Y%m%d"))}\w\d+.EOF'
            req=Request(url,headers=headers) # 发送请求头
            sleep(2) # 睡眠两秒,防止网站识别
            opener=build_opener()
            result=opener.open(req)
            a=result.read().decode() # 获取所有的精轨网址,以str类型进行保存
            result1 = re.search(str, a) # 利用正则表达式进行匹配
            href.append(result1.group()) # 将匹配好的数据存放道href列表中
        return href # 返回href列表
    except URLError as e:
        print(print('网络错误为:'+e))
def DownLoad_POD():#开始下载POD数据文件
    ua = UserAgent(family='chrome')
    UA = ua.random()#设置虚拟代理
    headers = {'User-Agent': UA,
             'Cookie':'_ga=GA1.2.649753142.1634525068; _ce.s=v11.rlc~1634525094488; asf-urs=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmaXJzdF9uYW1lIjoiXHU3ZDIyIiwibGFzdF9uYW1lIjoiXHU4Zjg5IiwidXJzLXVzZXItaWQiOiJzdW96aGlodWkiLCJ1cnMtYWNjZXNzLXRva2VuIjoiZXlKMGVYQWlPaUpLVjFRaUxDSnZjbWxuYVc0aU9pSkZZWEowYUdSaGRHRWdURzluYVc0aUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SjBlWEJsSWpvaVQwRjFkR2dpTENKamJHbGxiblJmYVdRaU9pSkNUMTl1TjI1VVNXeE5iR3BrZGxVMmExSlNRak5uSWl3aVpYaHdJam94TmpVek1qQXlOekF4TENKcFlYUWlPakUyTlRBMk1UQTNNREVzSW1semN5STZJa1ZoY25Sb1pHRjBZU0JNYjJkcGJpSXNJblZwWkNJNkluTjFiM3BvYVdoMWFTSjkuWHRKa2k4QkcxUFpUSWd0Um03UlN6ZUlOM0FhTWhfSmtjUF91bnhmbHB4WSIsInVycy1ncm91cHMiOltdLCJpYXQiOjE2NTA2MTA3MDIsImV4cCI6MTY1MTIxNTUwMn0.W8Ygb7kVfDO0FFi0i0-zyPCthRD2owCAiBbGawRBvnlcMYS7K5eBsWyYClgHGFfiHtVS83CdYQvZG3g06a1gGPMzqfWqEu55LqcGN-CRNdXt6NeR0a-Ybf9_NQU_TGQNke4xFWx9bOp6LOJXmxUmhTsb4N7ESUqSJccGzPXnr3izZVc1Hqzl-Oiath43mTSRL-nFVJA5V9NpiksbufND4rvxSWa6D5fV63n1pw-uFwola92C86GBaSZo5mKcSLP4llvUktDQViVkZClWde6UtuWsnds7ABIMps9CZj7KBH7jlOWGDkc_Jq0UAeeSzY0ZCYm0zfd0jkWJ3YjehgSH_SlGSStu_H0DELLnPcOXoyhg2QgrmgABbU5YQ-Y0SR95XQCFnauXK_g1nPpHQ3REChPZ7cNPNkjNb1Nqep_D0AfS3TerMw8t_yKSJ9t-sF_ydArhF4IH1yjNSV5aza69vkVtL5dQZLFUQp8nkjURg9dQy5vXS6Q7tbZTMnKj1borHW-uzXZiQ4G5LhsWGRLnpCqheC7IvqrVu2LzhnthD0UMFer2RLMVWPkYQ1jyCxmDV-u15Jt3j7f5sryyV-HSLqt_4Dv2WERX1d4Y-IGsxamxILA3I8f8NlhNfgFKMG8J2bAlF53rupfr6BsQRKfS9LCXzxpMcwn8xeZSL2Okhoc; urs-user-id=suozhihui; urs-access-token=eyJ0eXAiOiJKV1QiLCJvcmlnaW4iOiJFYXJ0aGRhdGEgTG9naW4iLCJhbGciOiJIUzI1NiJ9.eyJ0eXBlIjoiT0F1dGgiLCJjbGllbnRfaWQiOiJCT19uN25USWxNbGpkdlU2a1JSQjNnIiwiZXhwIjoxNjUzMjAyNzAxLCJpYXQiOjE2NTA2MTA3MDEsImlzcyI6IkVhcnRoZGF0YSBMb2dpbiIsInVpZCI6InN1b3poaWh1aSJ9.XtJki8BG1PZTIgtRm7RSzeIN3AaMh_JkcP_unxflpxY'}
    hrefs=get_info_href()
    path() # 返回设置到的POD路径
    num=0
    for href in hrefs: # 遍历每一个返回回来的POD网址
        try:
            url = f'https://s1qc.asf.alaska.edu/aux_poeorb/{href}'
            req = Request(url, headers=headers)
            sleep(2)
            opener= build_opener()
            result = opener.open(req)
            try:
                '''开始下载数据'''
                print('数据下载中')
                f = open(f'{href}', 'w', encoding='utf-8')
                f.write(result.read().decode())
                f.close()
                print(f'{href}下载完成')
                num = num + 1
            except BaseException as f:
                print('文件下载错误为:',f)
        except URLError as e:
            print('网络错误为:',e)
    print('下载POD数据',str(num),'个',f'下载文件夹路径为{os.getcwd()}')
def path(): # 更改路径,创建POD文件夹
    path = os.getcwd()
    isexist = os.path.exists('POD')
    if not isexist: # 判断该路径下有无POD文件
        os.mkdir('POD')
        os.chdir(f'{path}\POD')
        print(f'在该{path}下已创建POD文件夹,已将当前目录设置为{os.getcwd()}')
    else:
        os.chdir(f'{path}\POD')
        os.chdir(f'{path}\POD')
        print(f'该{path}下已存在POD文件夹,已将当前目录设置为{os.getcwd()}')
def get_datetime(): # 对csv文件里面的时间进行转换
    with open(r'D:\pythonProject\python爬虫\datatime.csv', encoding='utf-8') as a:
        a_scv = pandas.read_csv(a, header=None)
        nrows = a_scv.shape[0]
        ncols = a_scv.columns.size
        list = []
        print('时间数据加载中')
        for irow in range(nrows):
            for icol in range(ncols):
                print(a_scv.iloc[irow, icol])
                list.append(a_scv.iloc[irow, icol])
        print(f'加载{nrows}条时间数据')
        time = []
        for t in list:
            time.append(parse(str(t)).date())
        return time
if __name__=='__main__':
    start_time=datetime.datetime.now()
    DownLoad_POD()
    end_time=datetime.datetime.now()
    spend_time=(end_time-start_time).seconds
    print('下载时间为',spend_time,'s')

 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值