2010-12-29 14 views
5

Wie kann ich das XML holen und dann analysieren, um den Wert für <age> herauszuholen?Wie man XML in Python auf Google App Engine analysieren

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

Ich versuche zur Zeit:

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

Aber ich bin nicht sicher, ob ich auf dem richtigen Weg bin. Wenn ich versuche zu analysieren, erhalte ich Fehler (ich denke, weil das XML nicht gültig ist).

+0

funktioniert gut, wenn ich die Seite mit 'urllib2' greifen:' xml = ElementTree.fromstring (urllib2.urlopen ('http: //www.boardgamegeek ( e/13 '). read()) ' – marcog

+0

Ich bekomme die XML, aber ich weiß nicht, wie man ElementTree verwendet, um die Werte einzelner Elemente zu erfassen. Also, wie greife ich den Wert für ? –

Antwort

2

Die folgenden Werke für mich:

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') oder xml.findtext('boardgames/age') würde normalerweise erhalten Sie die 10 innerhalb <age>10</age>, aber die Analyse scheint aufgrund ungültiger XML fehlschlagen. ElementTree macht eine ziemlich schlechte Arbeit der Analyse ungültiger XML in meiner Erfahrung.

Verwenden Sie stattdessen BeautifulSoup, die ungültige XML gut behandelt.

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

Ah BeautifulSoup. Es ist Magie! Vielen Dank. –