使用Python解析包含"&"的HTML数据

2 投票
3 回答
938 浏览
提问于 2025-04-17 02:17

我正在使用Python的SGMLParser库来解析一些HTML内容。

我遇到了一个这样的HTML标签:

<td class="school">Texas A&amp;M</td>

我想提取出“Texas A&M”。但是当handle_data被调用时,它只返回“Texas A”,然后单独返回“M”(这里加上引号是为了更清楚)。

我该如何在调用之前,把这个

&amp; 

字符串中的&替换成&,而不影响整个字符串中的其他特殊符号(因为有些我可能还需要用到)呢?

谢谢!

3 个回答

1

&amp; 这样的实体引用是由 handle_entity 这个方法来处理的。你需要确认这个方法是否知道怎么把 &amp; 转换成正常的字符。默认情况下,它应该会调用 handle_data('&'),但是你可能不小心把它覆盖掉了。

另外,如果可以的话,建议使用更先进的 lxml 库。

2

SGMLParser 有一个叫 convert_entityref() 的方法,但我建议你不要使用已经不推荐的 SGMLParser。可以考虑使用 lxml 或者 Beautiful Soup,这两个库提供了更好的解析器接口。

4

如果你把旧的 SGMLParser 换成一个现代的替代品,比如 LXML(它也能处理HTML),那么这件事就变得非常简单了:

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

撰写回答