2015-07-20 78 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