从API响应中解析XML

2 投票
2 回答
6408 浏览
提问于 2025-04-17 11:01

我花了几个小时想从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

下面是一个如何使用 lxmlXPath 表达式 的例子。

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

撰写回答