2014-07-21 123 views
0

我有這個數據結構。美麗的湯解析XML

<photo id="123" owner="12345" secret="xx" server="12" farm="4" title="109L_0195" 
ispublic="1" isfriend="0" isfamily="0" views="0" tags="military czechrepublic kmk koně 
humpolec všestrannost humpoec vysocinaregion" latitude="49.550933" longitude="15.36652" 
accuracy="16" context="0" place_id="tg5cqdpWW7q18rE" woeid="790349" geo_is_family="0" 
geo_is_friend="0" geo_is_contact="0" geo_is_public="1"> 
<description> 
Kvalifikační kolo KMK - všestrannost 18.7.2014 - Humpolec 
</description> 
</photo> 


<photo id="123" owner="06" secret="xx" server="12" farm="4" 
title="Ytterligare en bild ifrån inspelningen av Johan Stjerquist's video: Nudist 
Javisst." ispublic="1" isfriend="0" isfamily="0" views="0" tags="square squareformat 
iphoneography instagramapp uploaded:by=instagram" latitude="56.171184" 
longitude="14.741144" accuracy="16" context="0" place_id="u4MzsN9ZW7KnPWo" 
woeid="898740" geo_is_family="0" geo_is_friend="0" geo_is_contact="0" geo_is_public="1"> 
<description/> 
</photo> 

它是一個關於通過Flickr API訪問的照片的信息的和平。 我想提取以下信息: ID 標題 標籤 經度緯度

,我試圖通過這個來完成。

url = "https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=5....b&per_page=250&accuracy=1&has_geo=1&extras=geo,tags,views,description" 
soup = BeautifulSoup(urlopen(url)) 

for data in soup.find_all('photo'): 
    print (data.attrs['id' , 'title' , 'tags' , 'latitude' , 'longitude' , 'accuracy']) 

這沒有奏效。 attrs只接受一個參數。看看BeautifulSoup的文檔,它看起來像沒有其他工具可以幫助我獲取所有信息,或者我誤會了(http://www.crummy.com/software/BeautifulSoup/bs4/doc/)?我試圖通過p代替attrs,但那也沒有奏效。

任何想法,我可以使用的命令?

回答

1

由於attrs是一個字典,你可以使用字典解析得到的只是特定按鍵:

keys = {'id', 'title', 'tags', 'latitude', 'longitude'} 
for photo in soup.find_all('photo'): 
    print({key:value for key, value in photo.attrs.iteritems() if key in keys}) 

請注意,您應該在Python-3.X的情況下使用items()

+0

對不起,這有點搞砸了。可以編輯它了。這裏編輯的版本。 我對python非常陌生,所以如果我要提出一些愚蠢的話,請原諒我。返回的值也存儲在字典中,對嗎?如果我想給我的第一個'loop'提供一個帶有很多鏈接的'list'來迭代(所以'url'將會是一個帶有不同URL的列表),它會把返回的'values'附加到' dic'或覆蓋它,因爲每個鏈接將被單獨調用 – Stophface

+0

@Christoph好,這個代碼只是演示如何抓住每張照片的特定屬性並打印出來。如果你願意,你可以將它們收集到列表中 - 取決於你期望的目標是什麼。 – alecxe

+0

多數民衆贊成多說,我想要做什麼http://stackoverflow.com/questions/24876399/smartest-way-to-store-huge-amounts-of-data/24876613?noredirect=1#comment38639634_24876613 – Stophface