使用Python解析包含"&"的HTML数据
我正在使用Python的SGMLParser库来解析一些HTML内容。
我遇到了一个这样的HTML标签:
<td class="school">Texas A&M</td>
我想提取出“Texas A&M”。但是当handle_data被调用时,它只返回“Texas A”,然后单独返回“M”(这里加上引号是为了更清楚)。
我该如何在调用之前,把这个
&
字符串中的&替换成&,而不影响整个字符串中的其他特殊符号(因为有些我可能还需要用到)呢?
谢谢!
3 个回答
1
像 &
这样的实体引用是由 handle_entity
这个方法来处理的。你需要确认这个方法是否知道怎么把 &
转换成正常的字符。默认情况下,它应该会调用 handle_data('&')
,但是你可能不小心把它覆盖掉了。
另外,如果可以的话,建议使用更先进的 lxml 库。
2
SGMLParser 有一个叫 convert_entityref()
的方法,但我建议你不要使用已经不推荐的 SGMLParser。可以考虑使用 lxml 或者 Beautiful Soup,这两个库提供了更好的解析器接口。
4
如果你把旧的 SGMLParser
换成一个现代的替代品,比如 LXML(它也能处理HTML),那么这件事就变得非常简单了:
>>> etree.fromstring('''<td class="school">Texas A&M</td>''').text
'Texas A&M'