使用xml.dom.minidom在第1行第0列解析ExpatError

时间:2014-02-13 19:38:03

标签: python xml minidom

我有一个Python脚本,大约一个月前停止工作。但在那之前,它几个月(如果不是几年)完美无缺。下面提供了一个很小的独立7行脚本来演示这个问题。

我遇到了xml.dom.minidom的XML解析问题,错误消息包含在下面。奇怪的是,如果我在网络上使用XML验证器来直接验证这个特定的URL,那一切都很好。此外,我在Firefox或Chrome中保存了页面源,然后根据保存的XML文件进行了验证,这一切都很好。

由于错误发生在输入的最开始(第1行,第0列),如下所示,我想知道这是否是编码不匹配。但是,根据FireFox或Chrome中保存的页面源,开头有以下内容:

  

xml version =“1.0”encoding =“UTF-8”

<program>
=================================================
#!/usr/bin/env python

import urllib2
from xml.dom.minidom import parseString

fd = urllib2.urlopen('http://api.worldbank.org/countries')
data = fd.read()
fd.close()
dom = parseString(data)
=================================================


<error msg>
=================================================
Traceback (most recent call last):
  File "./bugReport.py", line 9, in <module>
    dom = parseString(data)
  File "/usr/lib/python2.7/xml/dom/minidom.py", line 1931, in parseString
    return expatbuilder.parseString(string)
  File "/usr/lib/python2.7/xml/dom/expatbuilder.py", line 940, in parseString
    return builder.parseString(string)
  File "/usr/lib/python2.7/xml/dom/expatbuilder.py", line 223, in parseString
    parser.Parse(string, True)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 1, column 0
=================================================

我在Ubuntu 13.10上运行Python 2.7.5+。

感谢。

1 个答案:

答案 0 :(得分:0)

http://api.worldbank.org/countries以[{3}}回复,即使urllib2无法处理它并且不会要求它。你必须手动枪杀响应。请参阅:Content-Encoding of gzip