程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

批量獲取精密軌道數據(python)

編輯:Python

文章目錄

  • 1、提取成像日期(pandas)
  • 2、生成csv日期文件(excel)
  • 3、獲取cookie(html)
  • 4、數據爬取(爬蟲)

1、提取成像日期(pandas)

import os
import pandas as pd
def writefilename2excel(folder_path, excel1_path, txt_path):
# 加載文件夾
folder = os.listdir(folder_path)
satellite_list = [] # 衛星
image_list = [] # 成像模式
product_list = [] # 產品類別
time_list = [] # 成像日期
moment1_list = [] # 成像時刻1
moment2_list = [] # 成像時刻2
orbit_list = [] # 絕對軌道號
task_list = [] # 任務數據利用標識符
code_list = [] # 產品唯一識別碼
for file in folder:
# file_list.append(file)
satellite = file.split('_')[0] # 獲取衛星標識
# print(satellite)
satellite_list.append(satellite)
# print(satellite)
image = file.split('_')[1] # 獲取成像方式
# print(image)
image_list.append(image)
product = file.split('_')[2] # 獲取產品類別
# print(product)
product_list.append(product)
time = file.split('_')[5] # 獲取成像日期
time = time.split('T')[0] # 獲取成像日期
time_list.append(time)
# print(time)
moment1 = file.split('_')[5].split('T')[1] # 獲取成像開始時刻
moment1_list.append(moment1)
moment2 = file.split('_')[6].split('T')[1] # 獲取成像結束時刻
moment2_list.append(moment2)
orbit = file.split('_')[7] # 獲取絕對軌道號
orbit_list.append(orbit)
task = file.split('_')[8] # 獲取任務數據利用標識符
task_list.append(task)
code = file.split('_')[9] # 獲取任務數據利用標識符
code_list.append(code)
all_list = {

'satellite_list': satellite_list,
'image_list': image_list,
'product_list': product_list,
'time_list': time_list,
'moment1_list': moment1_list,
'moment2_list': moment2_list,
'orbit_list': orbit_list,
'task_list': task_list,
'code_list': code_list,
}
df = pd.DataFrame(all_list)
# columns = ['file_name', 'sensor', 'longitude', 'latitude','time', 'product_ID']
pd.DataFrame(df).to_excel(excel1_path, index=False)
# for i in range(len(product_ID_list)):
# product_ID_list[i].replace("'", "")
# print(product_ID_list)
str = '\n'
f = open(txt_path, "w")
f.write(str.join(time_list))
f.close()
if __name__ == '__main__':
folder = r''
excel = r''
txt = r''
writefilename2excel(folder, excel, txt)


2、生成csv日期文件(excel)

用excel生成一個日期.csv,不要title,保存為CSV UTF-8文件類型

3、獲取cookie(html)

打開網頁源碼,獲取cookie

4、數據爬取(爬蟲)

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() # 設置虛擬代理
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.41'
headers = {
'User-Agent': UA,
'Cookie': ''}
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('網絡錯誤為:' + '{0}'.format(e)))
def DownLoad_POD(): # 開始下載POD數據文件
ua = UserAgent(family='chrome')
UA = ua.random() # 設置虛擬代理
headers = {

'User-Agent': UA,
'Cookie': ''}
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'C:\Users\123\Desktop\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__':
import http.client
http.client.HTTPConnection._http_vsn = 10
http.client.HTTPConnection._http_vsn_str = 'HTTP/1.0'
start_time = datetime.datetime.now()
DownLoad_POD()
end_time = datetime.datetime.now()
spend_time = (end_time - start_time).seconds
print('下載時間為', spend_time, 's')


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved