用Python解析METAR网页

3 投票
1 回答
3196 浏览
提问于 2025-04-17 02:01

我需要在一个Python脚本中使用METAR天气信息。我找到了一些资料,地址是http://pypi.python.org/pypi/metar/1.4.0,看起来可以满足我对当前METAR的需求。不过,我还需要使用一些历史天气信息。

我发现了Navlost.eu这个网站,似乎很适合我的需求。比如说,以下这个链接: http://www.navlost.eu/aero/metar/?icao=KBOS&dt0=2010-07-14+02%3A00%3A00&c=1&rt=metar

Python的METAR模块是通过读取一个文本文件来获取数据的。我想知道如何像解析文本文件那样解析这个网页,以便我只提取出“KBOS 140154Z 15006KT 8SM -RA OVC034 23/22 A2994”这段文字?

1 个回答

2

看一下上面链接返回的原始 HTML 内容,你会发现 METAR 数据被夹在 <code> 标签之间:

<p><hr/><br/><code>KBOS 140154Z 15006KT 8SM -RA OVC034 23/22 A2994</code><br/><br/>

接下来,用 Python 的正则表达式来提取这些数据:

import urllib2
import re

URL="http://www.navlost.eu/aero/metar/?icao=KBOS&dt0=2010-07-14+02%3A00%3A00&c=1&rt=metar"
f = urllib2.urlopen(URL)
data = f.read()

r = re.compile('<code>(.*)</code>', re.I | re.S | re.M)
print r.findall(data)[0]

正则表达式在 re.compile 这一行中,你会看到 (.*),这表示你想要获取括号内的所有字符。函数 r.findall 会返回所有符合这个表达式的字符串,而 [0] 则是取第一个匹配的结果。

下面是输出结果:

KBOS 140154Z 15006KT 8SM -RA OVC034 23/22 A2994

撰写回答