使用Python来解析包含“&”的html数据

时间:2011-09-14 12:50:05

标签: python html-parsing

我正在使用python库SGMLParser来解析一些html。 我遇到了

形式的html标签
<td class="school">Texas A&amp;M</td>

我想读出“Texas A&amp; M”。但是当调用handle_data时,它会被“Texas A”调用,然后单独调用“M”(为了清晰起见,引号)。

如何更换

&amp; 

带&amp;的字符串在调用之前,没有替换整个字符串中的所有特殊&符号(其中一些我可能需要)。

谢谢!

3 个答案:

答案 0 :(得分:4)

如果您从deprecated SGMLParser切换到现代替代方案,例如LXML(也处理HTML),这就变得微不足道了:

>>> etree.fromstring('''<td class="school">Texas A&amp;M</td>''').text
'Texas A&M'

答案 1 :(得分:2)

SGMLParser有convert_entityref()方法,但我建议使用具有更好解析器API的lxmlBeautiful Soup而不是弃用的SGMLParser。

答案 2 :(得分:1)

&amp;等实体引用由handle_entity处理。检查此方法是否知道如何翻译&amp;。默认实现应该调用handle_data('&'),但您可能不小心覆盖了它。

此外,如果可能,请考虑使用更高级的lxml代替。