使用Beautiful Soup解析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 个回答
2
因为 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()
。