Python Request 包: 处理 xml 响应

我非常喜欢 requests包及其处理 JSON 响应的舒适方式。

不幸的是,我不明白我是否也可以处理 XML 响应。有人经历过如何使用 requests包处理 XML 响应吗?是否有必要为 XML 解码包含另一个包?

181492 次浏览

requests不处理解析 XML 响应,不处理。XML 响应本质上比 JSON 响应复杂得多,如何将 XML 数据序列化为 Python 结构并不那么简单。

Python 带有内置的 XML 解析器,我建议您使用 ElementTree API:

import requests
from xml.etree import ElementTree


response = requests.get(url)


tree = ElementTree.fromstring(response.content)

或者,如果回应特别大,则采用渐进式方法:

response = requests.get(url, stream=True)


# if the server sent a Gzip or Deflate compressed response, decompress
# as we read the raw stream:
response.raw.decode_content = True


events = ElementTree.iterparse(response.raw)


for event, elem in events:
# do something with `elem`

外部 Lxml 项目构建在相同的 API 之上,为您提供了更多的特性和功能。

一种更简单的方法是使用 (咒语)包将 XML 转换成 dict

response = requests.get('http://blabla.com')
dict_data = xmltodict.parse(response.content)

现在,dict_data只是一个 Python 字典。

您可以使用 pip: pip install xmltodict安装它