6

我正在尝试使用允许我获取所需数据并以 XML 格式返回的 API 创建实时报告。我想知道的是,收到响应后,如何将其保存到本地的 .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)
4

2 回答 2

21

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

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)
于 2015-04-22T23:15:51.023 回答
10

与 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(text) 从字符串常量解析 XML 部分。与 XML() 相同。text 是一个包含 XML 数据的字符串。返回一个元素实例

于 2018-06-27T13:50:42.567 回答