2010-12-29 25 views
5

Para este following xml, ¿cómo obtengo el xml y luego lo analizo para obtener el valor de <age>?Cómo analizar XML en Python en 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> 
    ... 

actualmente estoy tratando:

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

Pero no estoy seguro de que estoy en el camino correcto. Cuando intento analizar, obtengo errores (creo que porque el xml no es válido xml).

+0

funciona bien cuando me agarra la página con 'urllib2':' xml = ElementTree.fromstring (urllib2.urlopen ('http: //www.boardgamegeek .com/xmlapi/boardgam e/13 '). read()) ' – marcog

+0

Obtengo el xml, pero no sé cómo usar ElementTree para captar los valores de los elementos individuales. Entonces, ¿cómo puedo tomar el valor de ? –

Respuesta

2

Los siguientes obras para mí:

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') o xml.findtext('boardgames/age') normalmente obtendría el 10 dentro de <age>10</age>, pero el análisis parece fallar debido a un xml no válido. ElementTree hace un trabajo bastante pobre de analizar xml no válido en mi experiencia.

En su lugar use BeautifulSoup, que maneja bien el xml no válido.

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

Ah BeautifulSoup. ¡Es magia! Gracias. –