Python lxml.etree.XMLSyntaxError:htmlParserEntityRef:应为'';
我试图弄清楚python lxml api,但遇到了一个特殊的问题。我已安装以下库版本:Python lxml.etree.XMLSyntaxError:htmlParserEntityRef:应为'';,python,lxml,Python,Lxml,我试图弄清楚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 编辑: 事实证
- 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移动到一个文件(如下所示)
形象
35
28
-7
23,000
373,000
644,000
+72.65%
形象
35
28
-7
23,000
373,000
644,000
+72.65%
我现在得到这个错误:
对于事件,上下文中的元素:
文件“iterparse.pxi”,第515行,在lxml.etree.iterparse中。next
(src/lxml/lxml.etree.c:86484)文件“parser.pxi”,第565行,在
lxml.etree.\u raiseParserError(src/lxml/lxml.etree.c:64084)
lxml.etree.XMLSyntaxError:分析属性名称时出错,第1行,
第12栏
原点错误:
对于事件,上下文中的元素:
文件“iterparse.pxi”,第515行,在lxml.etree.iterparse中。next
(src/lxml/lxml.etree.c:86484)文件“parser.pxi”,第565行,在
lxml.etree.\u raiseParserError(src/lxml/lxml.etree.c:64084)
lxml.etree.XMLSyntaxError:htmlParserEntityRef:应为“;”,第7行,
第71栏
我想我在这里非常仔细地学习了lxml的教程,所以我很困惑。可能是安装问题吗?问题是HTML格式不正确。要解决这个问题,您可以使用(它能够解析这个HTML)或在解析之前清理HTML 我发现的问题是:
- 符号应在链接中作为HTML实体转义:
=>&
&代码>
- 第一个
标记后的关闭a
标记必须移除,因为它与任何其他打开td
标记不匹配td
iterparse
无法解析损坏的html。如果您有一个非常大的文件或内存限制,您可以像中那样编写自己的解析器。但是如果允许您将整个树存储到内存中,您可以使用lxml.html
,这比BeautifulSoup
要分析的是实际的html吗?如果您使用E builder构建相同的HTML会发生什么?这不是实际的HTML,我将其替换为“…”,因为brevityIt看起来在一个真正的解析错误上失败了。如果你有平凡的HTML,它成功了吗?你是对的。琐碎的HTML确实会通过。我已经相应地更新了这个问题。不过,我甚至不觉得这是一个构造糟糕的HTML?谢谢。我使用了BeautifulSoup,然后我切换到lxml,因为我读到它可以更好地处理大文件,因为它支持迭代解析。我现在看到了一个漂亮的lxml接口,所以我可以试试看
<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>