Python Requests包:处理XML响应

144

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

不幸的是,我不清楚是否可以处理XML响应。有没有人有使用requests包处理XML响应的经验?是否需要另外安装一个用于XML解码的包?


如果您使用pydantic,可以依赖于pydantic-xml将您的XML数据转换为pydantic架构。 - Pynchia
2个回答

238

requests 不处理解析XML响应。XML响应的性质比JSON响应复杂得多,将XML数据序列化为Python结构不像JSON那样直截了当。

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基础上构建,为您提供更多功能和更强大的功能。


1
我一直使用lxml,不知道这已经存在于Python内置中了。 - Shiplu Mokaddim

34

一种更简单的方法是使用xmltodict包将XML转换为dict

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

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

您可以使用pip进行安装:pip install xmltodict


当我尝试使用它时,会出现“ExpatError:not well-formed(invalid token):line 1,column 2”的错误。这是xml文本的开头: <?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet type="text/xsl" href="SettlementSummary.xsl"?> - otterdog2000
1
嗨@otterdog2000,我认为你的问题超出了这个问题的范围,你应该开一个新的问题。 - Vincenzo Lavorini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接