2015-07-20 223 views
-1

因此,我想编写一个python代码,只需要最新的Metar并将其吐出。这里的诀窍是,这个网址不断更新,但我仍然希望它只采用最新的Metar并吐出它,而忽略其他以前的Metars。如何使用python获取Metar数据

到目前为止,我有什么代码是:

import urllib2 

import re 

URL="http://www.ogimet.com/display_metars2.php?lang=en&lugar=kewr&tipo=SA&ord=REV&nil=SI&fmt=html&ano=2015&mes=07&day=20&hora=17&anof=2015&mesf=08&dayf=19&horaf=18&minf=59&send=send" 

f = urllib2.urlopen(URL) 

data = f.read() 

r = re.compile('<pre>(.*)</pre>', re.I | re.S | re.M) 

print r.findall(data) 

当我运行它,它返回所有Metars。

在此先感谢!

+0

您可能想要尝试其中一个metar库(https://pypi.python.org/pypi/metar/,https:/ /pypi.python.org/pypi/pymetar/) – thebjorn

回答

0

您的正则表达式不正确,.*正在捕获的一切 - 包括<\pre>标签。当我使用正则表达式进行这种类型的解析时,我通常使用表格<tag>([^<]*),其中组匹配除<之外的任何字符,它们表示下一个标记;显然,这不是一个超强大的解决方案,但往往足以做到这一点。此外,你不需要你的正则表达式中的标志。在你的情况下,你将有:

r=re.compile(`<pre>([^<]*)`) 

其次,re.findall返回匹配列表。在Python中,列表使用方括号进行索引,索引从零开始;如果要打印列表的第一个元素,可以拨打

print r.findall(data)[0] 
+0

当我添加[0]时,它仍然返回所有的Metars – John