4

我正在尝试解析我从网上下载的 XML 页面。

import requests
url = "http://www.w3schools.com/xml/cd_catalog.xml"
XML = requests.get(url)
print XML.content

tree = ET.ElementTree(XML)
root = tree.getroot()

print root.tag, root.attrib

尝试执行此操作时出现两个错误之一

对于上面的示例网页 AttributeError: 'Response' object has no attribute 'tag'

对于实际的 XML 站点,我正在查看 AttributeError: 'str' object has no attribute 'tag'

但是,如果我只是将下载的 XML 复制并粘贴到 .xml 文件中并打开它,它可以正常工作,没有错误。有谁知道如何解决这些问题..?

4

1 回答 1

12

您需要解析响应正文,而不是响应对象:

root = ET.fromstring(XML.content) # no .getroot() call required

或传入一个文件对象:

XML = requests.get(url, stream=True)
tree = ET.parse(XML.raw)
root = tree.getroot()

如果流被压缩,后者可能会失败;原始文件对象不会为您解压缩。

于 2013-06-19T22:25:59.733 回答