2014-03-29 25 views
1

我想拉NextBus數據第二屬性搶XML標籤,特別是公交車的GPS位置實時看到:http://webservices.nextbus.com/service/publicXMLFeed?command=vehicleLocations&a=sf-muni&r=N&t=0用BeautifulSoup

在這裏面,也有看起來像這樣的標籤:

<vehicle id="1534" routeTag="N" dirTag="N__OB1" lat="37.76931" lon="-122.43249" 
     secsSinceReport="99" predictable="true" heading="265" speedKmHr="37"/> 

我正在學習Python和已經走通過成功地拉基於屬性的標籤。但我正在努力尋找除id以外的任何屬性。

所以此工程:

soup.findAll("vehicle", {"id":"1521"})[1] 

但這返回一個空集

soup.findAll("vehicle", {"routeTag":"N"}) 

有什麼理由?

而且,正如我所說,我是嶄新的到Python,所以如果你有最喜歡的刮教程隨意發表評論!

+1

除非你明確告訴BeautifulSoup解析爲XML(僅適用於'lxml'安裝)一切*小寫*因爲HTML標籤的匹配不區分大小寫。的 –

+0

可能重複[BeautifulSoup提高AttributeError的當XML標記名稱包含大寫字母(http://stackoverflow.com/questions/21561977/beautifulsoup-raise-attributeerror-when-xml-tag-name-contains-capital-letters) –

回答

0

要使其工作,你應該通過xmlBeautifulSoup構造:

from urllib2 import urlopen 
from bs4 import BeautifulSoup 

url = 'http://webservices.nextbus.com/service/publicXMLFeed?command=vehicleLocations&a=sf-muni&r=N&t=0' 
soup = BeautifulSoup(urlopen(url), "xml") 

print soup.find_all("vehicle", {"routeTag":"N"}) 

打印:

[ 
<vehicle heading="-4" id="1431" lat="37.72223" lon="-122.44694" predictable="false" routeTag="N" secsSinceReport="65" speedKmHr="0"/>, 
... 
] 

或者,感謝@的Martijn的評論,在較低的情況下進行搜索:

print soup.find_all("vehicle", {"routetag": "N"}) 

另外請注意,您應該使用BeautifulSoup4find_all()方法 - 第3個BeautifulSoup版本不被維護。