Как разобрать xml в Python на Google App Engine - PullRequest
5 голосов
/ 29 декабря 2010

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

<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).

Ответы [ 2 ]

7 голосов
/ 29 декабря 2010

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
2 голосов
/ 29 декабря 2010

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

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")
...