如何将Python中requests返回的bytes响应转为易操作的可读格式?
解决XML响应的bytes格式转换与信息提取问题
第一步:将bytes格式响应转为可读XML字符串
requests库提供了便捷的编码处理方式:
- 直接使用
resp.text属性,它会自动根据响应头的编码信息解码bytes内容,得到标准字符串格式的XML:xml_str = resp.text - 如果自动解码出现问题,可手动指定XML中声明的编码(比如示例里的UTF-8)进行解码:
xml_str = resp.content.decode('utf-8')
第二步:解析XML提取目标信息
Python标准库的xml.etree.ElementTree可以直接解析XML字符串,注意处理XML的命名空间(示例中XML带有xmlns="http://XXXX.io"属性):
import xml.etree.ElementTree as ET # 解析XML字符串 root = ET.fromstring(xml_str) # 定义命名空间映射,前缀可自定义(比如这里用ns) ns_map = {'ns': 'http://XXXX.io'} # 提取<status>标签的内容 status = root.find('ns:status', ns_map).text print(status) # 输出:AGT_VALIDATED # 提取<id>下<code>标签的内容 code = root.find('ns:id/ns:code', ns_map).text print(code) # 输出:140012
可选方案:使用lxml库(需额外安装)
如果需要更强大的XML处理能力(比如XPath查询),可以使用lxml库:
- 先安装依赖:
pip install lxml - 示例代码:
from lxml import etree root = etree.fromstring(xml_str) # 使用XPath查询,需指定命名空间 status = root.xpath('//ns:status/text()', namespaces={'ns': 'http://XXXX.io'})[0] code = root.xpath('//ns:id/ns:code/text()', namespaces={'ns': 'http://XXXX.io'})[0]
内容的提问来源于stack exchange,提问作者kenshuri
相关产品推荐
相关产品推荐

