2010-12-29 2 views
5

Per questo following xml, come posso recuperare l'xml e quindi analizzarlo per ottenere il valore per <age>?Come analizzare xml in Python su 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> 
    ... 

Attualmente sto cercando:

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

Ma io non sono sicuro di essere sulla strada giusta. Quando provo ad analizzare ho degli errori (penso perché l'xml non è valido xml).

+0

funziona bene quando mi afferra la pagina con 'urllib2':' xml = ElementTree.fromstring (urllib2.urlopen ('http: //www.boardgamegeek .com/xmlapi/boardgam e/13 '). read()) ' – marcog

+0

Ricevo l'xml, ma non so come usare ElementTree per afferrare i valori dei singoli elementi. Quindi, come faccio a prendere il valore per ? –

risposta

2

le seguenti opere per me:

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 otterrebbero il 10 all'interno di <age>10</age>, ma l'analisi sembra non riuscire a causa di un xml non valido. ElementTree fa un lavoro piuttosto povero di analizzare xml non valido nella mia esperienza.

Utilizzare invece BeautifulSoup, che gestisce bene xml non valido.

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

Ah BeautifulSoup. È magico! Grazie. –