You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python用requests读取URL中XML文件遇报错,求技术协助

排查Python requests读取XML时et.fromstring()的报错问题

看起来你在使用xml.etree.ElementTree.fromstring()解析请求返回的内容时遇到了问题,虽然报错信息没显示全,但结合你的代码场景,我整理了几个最可能的原因和对应的解决方法:

可能的原因及解决方法

1. 认证失败或请求未成功获取到XML内容

你的代码用了HTTPBasicAuth,如果用户名/密码错误、权限不足,或者目标URL有误,服务器可能返回的不是XML,而是HTML格式的错误页面(比如401、404页面),这时候用et.fromstring()解析就会报错。

解决步骤:

  • 先检查请求的状态码,确认请求是否成功:
    print(response.status_code)
    
    • 如果是401:说明认证失败,请检查username和password是否正确赋值,或者目标服务的认证方式是否为Basic Auth。
    • 如果是404:确认url是否正确,目标XML文件路径是否存在。
  • 打印返回的内容,确认是不是有效的XML:
    print(response.text)
    
    如果输出的是HTML代码,说明请求没拿到正确的XML,需要先解决请求层面的问题。

2. 编码问题导致XML内容解析失败

response.text是requests自动根据响应头推断编码后转成的字符串,如果推断的编码不正确,可能会导致XML内容出现乱码,进而解析失败。

解决方法:
改用response.content(原始字节流)来解析,et.fromstring()可以直接处理字节数据,避免编码转换的问题:

xml_data = et.fromstring(response.content)

3. 变量名拼写错误

从你的报错信息里看到xml_response.text,但你的代码里变量是response,这有可能是你代码里不小心把变量名写成了xml_response,但实际定义的是response,导致引用了未定义的变量?

解决方法:
检查代码里的变量名,确保解析时用的变量和请求返回的变量一致,比如统一用response:

xml_data = et.fromstring(response.text)  # 或者response.content

4. XML本身存在语法错误

如果请求确实拿到了XML,但XML内容本身有语法问题(比如标签未闭合、特殊字符未转义等),et.fromstring()也会报错。

解决方法:
使用更友好的解析库来获取详细的错误信息,比如lxml(需要先安装pip install lxml):

from lxml import etree

try:
    xml_data = etree.fromstring(response.content)
except etree.XMLSyntaxError as e:
    print(f"XML解析错误详情: {e}")

这样能得到具体的语法错误位置和原因,方便你修正XML内容(如果是你能控制的XML源的话)。

内容的提问来源于stack exchange,提问作者Sravani Chinta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:34:09