目标网站:https://aviationweather.gov/data/api/#/Dataserver/dataserverMetars
选择数据服务器接口:/api/data/dataserver?requestType=retrieve&dataSource=metars
选择起止时间(大概是最近48h,超过了会报错),勾选xml格式,点击执行。
然后在下方的响应处,点击download。
现在利用python读取xml数据到xlsx中:
from xml.dom.minidom import parse
from openpyxl import Workbook
def get_metar():
dom=parse('test.xml')
data = dom.documentElement
metars=data.getElementsByTagName('METAR')
#新建工作簿
workbook=Workbook()
#新建表格
sheet=workbook.active
#新建表头
sheet.append(['station_id','observation_time','temp_c','dewpoint_c','wind_dir_degrees','wind_speed_kt'
,'visibility_statute_mi','altim_in_hg','sea_level_pressure_mb','sky_condition','flight_category'])
for metar in metars:
#获取机场id
try:
m_id=metar.getElementsByTagName('station_id')[0].childNodes[0].nodeValue
except:
m_id='NaN'
#获取时间
try:
m_time=metar.getElementsByTagName('observation_time')[0].childNodes[0].nodeValue
except:
m_time='NaN'
#获取温度
try:
m_temp=metar.getElementsByTagName('temp_c')[0].childNodes[0].nodeValue
except:
m_temp='NaN'
#获取露点温度
try:
m_dewpoint=metar.getElementsByTagName('dewpoint_c')[0].childNodes[0].nodeValue
except:
m_dewpoint='NaN'
#获取风向
try:
m_wind_degree=metar.getElementsByTagName('wind_dir_degrees')[0].childNodes[0].nodeValue
except:
m_wind_degree='NaN'
#获取风速
try:
m_wind_speed=metar.getElementsByTagName('wind_speed_kt')[0].childNodes[0].nodeValue
except:
m_wind_speed='NaN'
#获取能见度
try:
m_visiblity=metar.getElementsByTagName('visibility_statute_mi')[0].childNodes[0].nodeValue
except:
m_visiblity='NaN'
#获取海平面气压
try:
m_hg=metar.getElementsByTagName('altim_in_hg')[0].childNodes[0].nodeValue
except:
m_hg='NaN'
#获取大气压(?)
try:
m_sea_level_pressure=metar.getElementsByTagName('sea_level_pressure_mb')[0].childNodes[0].nodeValue
except:
m_sea_level_pressure='NaN'
#获取云层覆盖层度(第一个)
try:
sky_condition=metar.getElementsByTagName('sky_condition')
m_sky_cover=sky_condition[0].getAttribute('sky_cover')
except:
m_sky_cover='NaN'
#获取采取的飞行策略
try:
m_flight_category=metar.getElementsByTagName('flight_category')[0].childNodes[0].nodeValue
except:
m_flight_category='NaN'
data=[m_id,m_time,m_temp,m_dewpoint,m_wind_degree,m_wind_speed
,m_visiblity,m_hg,m_sea_level_pressure,m_sky_cover,m_flight_category]
sheet.append(data)
#保存表格
workbook.save(filename="data.xlsx")
if __name__=="__main__":
get_metar()
效果预览: