3

我正在尝试使用解析器解析XMLa 。我知道还有其他库可以使用,但来自这个库是我最熟悉的,对我来说似乎最不复杂。URLxml.saxJava

我用来解析的代码如下:

parser = xml.sax.make_parser()
handler = MangaHandler()
parser.setContentHandler(handler)
url = urlfetch.Fetch('http://www.mangapanda.com/alphabetical', allow_truncated = False, follow_redirects = False, deadline = False)
xml.sax.parseString(url.content, handler)

一旦解析器到达第一个&符号,这将返回 SaxException(无效标记):

SAXParseException: <unknown>:582:34: not well-formed (invalid token)

因为urlfetch返回一个字符串而不是一个流,所以我不能使用parse()(它只适用于流),而是留给它使用parseString()。要查看解析为流是否可以解决此问题,我尝试了:

parser.parse(io.StringIO(url.content).encode('utf-8'))

但这会返回:

TypeError: initial_value must be unicode or None, not str

我还尝试使用urllib2返回流而不是返回流的库,urlfetch但文件太大并且被自动截断,从而使我丢失了数据。

任何解决此问题的方法都将不胜感激,因为我花了几天时间绕过一个障碍,只是为了被另一个障碍阻止。

4

1 回答 1

0

在 python 2.X 中,str类型实际上是一个字节数组,可以包含任何编码字符串。

下载编码为 UTF8 的内容时,您通常会将其作为编码 str(如果未编码,则不能是str,因为str是单字节字符数组)。在这种情况下,您应该使用decode('utf8')将编码转换str为 (decoded) unicode,它基本上是一个两字节字符数组。

然后您可以将unicode实例放入io.StringIO实例中以创建类似对象的文件。

于 2014-11-20T23:46:52.440 回答