【问题标题】:Save XML response from GET call using Python使用 Python 保存来自 GET 调用的 XML 响应
【发布时间】:2015-06-30 21:05:25
【问题描述】:

我正在尝试使用 API 创建实时报告,该 API 允许我获取所需的数据并以 XML 格式返回。我想知道的是,收到响应后,如何将其保存到本地的 .xml 文件中?或者缓存它,这样我可以在解析响应之前解析它。

import requests
r = requests.get('url',  auth=('user', 'pass'))

我正在使用请求,因为在我看来这是进行 GET 调用的最简单方法。另外,这是我的第一个问题,我刚刚开始学习 Python,如果你们有一点耐心,我将不胜感激。谢谢。

我正在查看一个类似的问题,但对于 JSON,不确定它是否会起作用,https://stackoverflow.com/a/17519020/4821590

import requests
import json
solditems = requests.get('https://github.com/timeline.json') # (your url)
data = solditems.json()
with open('data.json', 'w') as f:
    json.dump(data, f)

【问题讨论】:

  • file.open('foo.xml').write(r.text)

标签: python xml save python-requests parsexml


【解决方案1】:

如果您希望能够在处理返回的 XML 之前对其进行解析,xml tree 是您的朋友。

import requests
import xml.etree.ElementTree as ET

r = requests.get('url',  auth=('user', 'pass'))
tree = ET.parse(r.text)
root = tree.getroot()

否则,正如 jordanm 所说,您可以将其保存到文件中并完成。

with open('data.xml', 'w') as f:
    f.write(r.text)

【讨论】:

  • 谢谢,我现在正在看文档,真的很有帮助。抱歉,没有给你投票的声誉。
  • @JulioMontes 如果答案足够,您可以通过单击投票按钮旁边的勾号将其标记为已接受。如果您需要额外的帮助或提示,请在下方发表评论,我会为您提供帮助。或者您可以稍等片刻,看看还有什么其他答案 :)
  • 好吧,我将保持这个开放(不确定是否允许)并自己挖掘一下,看看我能走多远,不希望全部交给我,我很感激虽然它。
  • 我想知道是否有办法让我获得响应并能够选择要打印的内容。我知道它的 tree = ET.parse(r.text) 响应是整个 XML。但是,我想有选择性。我尝试只使用tree = ET.parse(r),但我一定遗漏了一些东西。
  • @juliomontes 你有例子吗?例如,您的意思是喜欢特定的子标签吗?
【解决方案2】:

与Python3相关的几点说明(至少3.6版本):

1) 将 xml.etree.ElementTree 与请求一起使用时,您使用 fromstring 而不是解析。 r.text 返回一个字符串,xml.etree.ElementTree.parse 用于文件

import requests
import xml.etree.ElementTree as ET

r = requests.get("https://xml.returning.uri")
root = ET.fromstring(r.text)

2) 这将创建一个元素对象作为根(不再是树)。所以要把它写回来,你需要把它变成一棵树:

tree = ET.ElementTree(root)
tree.write("file.xml")

来自文档

xml.etree.ElementTree.parse(source, parser=None) 将 XML 部分解析为元素树。 source 是包含 XML 数据的文件名或文件对象。

xml.etree.ElementTree.fromstring(文本) 从字符串常量解析 XML 部分。与 XML() 相同。 text 是一个包含 XML 数据的字符串。返回一个元素实例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2011-01-27
    • 2012-11-28
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    相关资源
    最近更新 更多