2010-12-29 2 views
5

Для этого following xml, как я могу получить xml, а затем проанализировать его, чтобы получить значение для <age>?Как разбирать xml в Python в Google App Engine

<boardgames> 
    <boardgame objectid="13"> 
    <yearpublished>1995</yearpublished> 
    <minplayers>3</minplayers> 
    <maxplayers>4</maxplayers> 
    <playingtime>90</playingtime> 
    <age>10</age> 
    <name sortindex="1">Catan</name> 
    ... 

В настоящее время я пытаюсь:

result = urlfetch.fetch(url=game_url) 
xml = ElementTree.fromstring(result.content) 

Но я не уверен, что я на правильном пути. Когда я пытаюсь разобрать, я получаю ошибки (я думаю, потому что xml недействителен xml).

+0

отлично работает, когда я хватаю страницу с 'urllib2':' XML = ElementTree.fromstring (urllib2.urlopen ('HTTP: //www.boardgamegeek .com/xmlapi/boardgam e/13 '). read()) ' – marcog

+0

Я получаю xml, но я не знаю, как использовать ElementTree для захвата значений отдельных элементов. Итак, как мне получить значение для ? –

ответ

2

следующие работы для меня:

import urllib2 
from xml.etree import ElementTree 

result = urllib2.urlopen('http://boardgamegeek.com/xmlapi/boardgame/13').read() 
xml = ElementTree.fromstring(result) 
print xml.findtext(".//age") 
7

xml.findtext('age') или xml.findtext('boardgames/age'), как правило, вы получите 10 внутри <age>10</age>, но разбор, похоже, завершился неудачно из-за недействительного xml. ElementTree делает довольно плохую работу по анализу недействительного xml в моем опыте.

Вместо этого используйте BeautifulSoup, который хорошо управляет xml.

content = urllib2.urlopen('http://boardgamegeek.com/xmlapi/boardgame/13').read() 
soup = BeautifulSoup(content) 
print soup.find('age').string 
+0

Ah BeautifulSoup. Это магия! Благодарю. –