使用Python从GET调用中保存XML响应

Jul*_*tes 6 python xml save python-requests parsexml

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

import requests
r = requests.get('url',  auth=('user', 'pass'))
Run Code Online (Sandbox Code Playgroud)

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

我正在寻找一个类似的问题,但对于JSON,不确定它是否会起作用,/sf/answers/1226331431/

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)
Run Code Online (Sandbox Code Playgroud)

eni*_*gma 18

如果您希望能够在使用它之前解析返回的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()
Run Code Online (Sandbox Code Playgroud)

否则,正如jordanm所评论的那样,您可以将其保存到文件中并完成它.

with open('data.xml', 'w') as f:
    f.write(r.text)
Run Code Online (Sandbox Code Playgroud)


小智 6

很少与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)
Run Code Online (Sandbox Code Playgroud)

2)这将创建一个元素对象作为根(不再有树)。因此,要写回它,您需要将其变成一棵树:

tree = ET.ElementTree(root)
tree.write("file.xml")
Run Code Online (Sandbox Code Playgroud)

来自文档

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

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