我试图找出python lxml api,但遇到了一个特殊的问题.我安装了以下库版本:
当我运行以下代码时:
html = open('file.html', 'r')
context = etree.iterparse(StringIO(html), events=("start", "end"), html='true')
for event, element in context:
#do stuff
Run Code Online (Sandbox Code Playgroud)
事实证明这是一个解析错误.我将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>
Run Code Online (Sandbox Code Playgroud)
我现在收到这个错误:
对于事件,元素在上下文中:
在lxml.etree.iterparse中输入"iterparse.pxi",第515行.下一个 (SRC/LXML/lxml.etree.c:86484)文件"parser.pxi",线路565,在lxml.etree._raiseParseError(SRC/LXML/lxml.etree.c:64084)lxml.etree.XMLSyntaxError:错误解析属性名称,第1行,第12列
原始错误:
对于事件,元素在上下文中:
在lxml.etree.iterparse中输入"iterparse.pxi",第515行.下一个 (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的网站上非常接近教程,所以我很困惑.这可能是安装问题吗?
问题是HTML格式不正确.要解决此问题,您可以使用BeautifulSoup(它能够解析此HTML)或在尝试解析HTML之前清理HTML.
我发现的问题是:
&=>&td第一个标记后的关闭标记,a因为它与任何其他开始td标记都不匹配.