【发布时间】:2011-12-29 05:56:14
【问题描述】:
我正在尝试找出 python lxml api,但遇到了一个特殊的问题。我已经安装了以下库版本:
- libxml2:2.7.8
- libxslt:1.1.26
当我运行以下代码时:
html = open('file.html', 'r')
context = etree.iterparse(StringIO(html), events=("start", "end"), html='true')
for event, element in context:
#do stuff
编辑:
原来是解析错误。我将 html 移动到一个文件中(如下所示)
<html>
<head></head>
<body>
<table>
<tr>
<td>image</td>
<a href="relative.phtml?with=querystring&blah=blah">blah\n(blah)</a></td>
<td> 35 </td>
<td> 28 </td>
<td><b>-7</b></td>
<td>
23,000 </td>
<td> 373,000 </td>
<td> 644,000 </td>
<td>+72.65%</td>
</tr>
<tr>
<td>image</td>
<td><a href="relative.phtml?with=querystring&blah=blah">blah\n(blah)</a></td>
<td> 35 </td>
<td> 28 </td>
<td><b>-7</b></td>
<td>
23,000 </td>
<td> 373,000 </td>
<td> 644,000 </td>
<td>+72.65%</td>
</tr>
</table>
</body>
</html>
我现在收到此错误:
对于事件,上下文中的元素:
文件“iterparse.pxi”,第 515 行,在 lxml.etree.iterparse 中。下一步 (src/lxml/lxml.etree.c:86484) 文件“parser.pxi”,第 565 行,在 lxml.etree._raiseParseError (src/lxml/lxml.etree.c:64084) lxml.etree.XMLSyntaxError:解析属性名称时出错,第 1 行, 第 12 栏
原点错误:
对于事件,上下文中的元素:
文件“iterparse.pxi”,第 515 行,在 lxml.etree.iterparse 中。下一步 (src/lxml/lxml.etree.c:86484) 文件“parser.pxi”,第 565 行,在 lxml.etree._raiseParseError (src/lxml/lxml.etree.c:64084) lxml.etree.XMLSyntaxError:htmlParseEntityRef:期待';',第 7 行, 第 71 栏
我以为我在这里非常接近地遵循了 lxml 的 site 的教程,所以我很困惑。会不会是安装问题?
【问题讨论】:
-
这是您正在解析的实际 HTML 吗?如果您使用 E 构建器构建相同的 HTML 会发生什么?
-
这不是实际的 html,为了简洁起见,我将其替换为 '...'
-
它看起来在真正的解析错误上失败了。如果你有简单的 HTML,它会成功吗?
-
你是对的。琐碎的 HTML 确实可以通过。我已经相应地更新了这个问题。不过,这甚至没有让我觉得 HTML 结构很差?