我在Python中使用urllib2和sre解析aprs.fi中的數據,以便我可以在正在處理的某些實時高空氣球代碼中使用天氣數據。解析代碼非常簡單:解析網頁中的sre.findall()
import urllib2
import sre
APRStracking = urllib2.urlopen("http://api.aprs.fi/api/get?name=KD8REX&what=loc&apikey=42457.M4AFa3hdkXG31&format=xml")
APRSxml = APRStracking.read()
latitude = sre.findall('<la.*>(.*)</la.*>', APRSxml)
print latitude
我試圖解析的數據是XML,它看起來像:
<xml>
<command>get</command>
<result>ok</result>
<what>loc</what>
<found>1</found>
<entries>
<entry>
<name>KD8REX</name>
<type>l</type>
<time>1339339410</time>
<lasttime>1339339410</lasttime>
<lat>41.95550</lat>
<lng>-83.65567</lng>
<altitude>2204.62</altitude>
<course>15</course>
<speed>15</speed>
<symbol>/O</symbol>
<srccall>KD8REX</srccall>
<dstcall>APT311</dstcall>
<status>UofM H.A.S. - Go Blue!</status>
<status_lasttime>1339339600</status_lasttime>
<path>WIDE1-1,WIDE3-3,qAR,W8SGZ</path>
</entry>
</entries>
</xml>
我並不十分熟悉Python,但我的理解ser.findall()是通過APRSxml查找與正則表達式匹配的任何字符串,然後在列表「緯度」中追加括號之間的任何內容。因此,在本例中,與正則表達式匹配的兩個值分別是「lasttime」和「lat」。但是,當我運行此代碼時,它只輸出<lat>
值,而不是<lasttime>
。坦率地說,這就是我真正需要的代碼工作,但出於好奇,如果有人能告訴我爲什麼它不像預期的那樣行事,我會很感激。謝謝。
它產生預期的輸出爲我。另外,你爲什麼使用'sre'而不是're'? – BrenBarn
我其實只是意識到我正在使用一個不推薦的模塊哈哈......但無論改變爲重新我仍然只獲得緯度值。 – ricewhite
你應該檢查APRSxml的價值是你認爲它是什麼(通過'print'ing,也許)。正如我所說,當我運行你的代碼'findall'時會返回兩個值。 – BrenBarn