前两天因为要做时序处理,需要的精密轨道数据很多,一个一个筛选很耗时耗力,所以作者就写了一个批量获取精密轨道数据的程序,供大家参考使用。
目录
一、精密轨道下载网址
二、程序使用的注意事项
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')