从API响应中解析XML
我花了几个小时想从imgur的API获取响应。我在终端里得到了XML格式的数据,但我不知道怎么提取和解析它。以下是我的代码。
c = pycurl.Curl()
values = [
("key", "Super Secret API Number"),
("image", (c.FORM_FILE, "pic.jpg"))]
c.setopt(c.URL, "http://api.imgur.com/2/upload.xml")
c.setopt(c.HTTPPOST, values)
c.perform()
c.close()
我对Python完全不熟悉,这是我第一次用Python,算是个新手。我听说可以用ElementTree来解析XML,但我找不到好的文档。
希望你能帮帮我。谢谢。
2 个回答
1
当我开始使用自带的ElementTree模块时,发现它的文档缺少好的示例(现在只有3个例子,而且其中只有一个是比较实用的)。
我在这里回答过一些关于lxml/ElementTree的问题,通常我看到很多人会在写那些奇怪的列表推导式时卡住,而这些其实用XPath可以更清晰地用一行代码解决:
如果你有更具体的问题,请提供一些源XML和你想要的效果。
希望这能帮到你,
3
把从 imgur-api
得到的响应保存到一个文件里。然后需要用一个 XML 解析器来解析你从 Imgur-API
得到的 XML 响应或文件。
有很多选择,比如 lxml 或者 BeautifulSoup。
下面是一个如何使用 lxml
和 XPath 表达式
的例子。
from lxml import etree
xml = """<foo>baz!</foo>"""
>>> xml = """<foo>baz!</foo>"""
>>> xp = etree.fromstring(xml)
>>> values = xp.xpath("//foo/text()")
>>> values
['baz!']
如果你需要解析一个 XML 文件:
# parse from file
et = etree.parse(source_xml)
value = et.xpath("your xpath xpr here")
如果你需要直接从网址解析:
# parse from URL
etree.parse("http://example.com/somefile.xml")
关于 XPath,可以使用火狐浏览器的 firebug
插件,或者安装 firepath
。