如何在 Google App Engine 上用 Python 解析 xml
Posted
技术标签:
【中文标题】如何在 Google App Engine 上用 Python 解析 xml【英文标题】:How to parse xml in Python on Google App Engine 【发布时间】:2011-06-01 05:05:20 【问题描述】:对于这个following 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)。
【问题讨论】:
当我用urllib2
抓取页面时工作正常:xml = ElementTree.fromstring(urllib2.urlopen('http://www.boardgamegeek.com/xmlapi/boardgam e/13').read())
我正在获取 xml,但我不知道如何使用 ElementTree 来获取单个元素的值。那么如何获取 的值?
【参考方案1】:
xml.findtext('age')
或 xml.findtext('boardgames/age')
通常会在 <age>10</age>
中为您提供 10,但由于 xml 无效,解析似乎失败。根据我的经验,ElementTree
在解析无效 xml 方面做得相当差。
改为使用BeautifulSoup,它可以很好地处理无效的xml。
content = urllib2.urlopen('http://boardgamegeek.com/xmlapi/boardgame/13').read()
soup = BeautifulSoup(content)
print soup.find('age').string
【讨论】:
【参考方案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")
【讨论】:
以上是关于如何在 Google App Engine 上用 Python 解析 xml的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google App Engine app.yaml 中处理尾部斜线
如何在 Google Cloud Functions 和 Google App Engine 之间进行选择?
如何在 Google App Engine 中执行全文搜索?