我正在使用python库SGMLParser来解析一些html。 我遇到的形式使用Python来解析包含“&”的html数据
<td class="school">Texas A&M</td>
我想读出“德克萨斯A & M”的HTML标签。但是,当handle_data被调用时,它会被调用“Texas A”,然后单独的“M”(为了清晰起见,引号)。
如何更换
&
串与呼叫之前&,而整个字符串(其中有一些我可能需要)在替换所有特殊的&符号。
谢谢!
我正在使用python库SGMLParser来解析一些html。 我遇到的形式使用Python来解析包含“&”的html数据
<td class="school">Texas A&M</td>
我想读出“德克萨斯A & M”的HTML标签。但是,当handle_data被调用时,它会被调用“Texas A”,然后单独的“M”(为了清晰起见,引号)。
如何更换
&
串与呼叫之前&,而整个字符串(其中有一些我可能需要)在替换所有特殊的&符号。
谢谢!
如果从deprecatedSGMLParser
切换到现代的替代,如LXML(也可以用来处理HTML),这将成为微不足道:
>>> etree.fromstring('''<td class="school">Texas A&M</td>''').text
'Texas A&M'
像&
实体引用由handle_entity
处理。检查此方法是否知道如何翻译&
。默认实现应该调用handle_data('&')
,但可能会意外覆盖它。
另外,如果可能的话,考虑使用更高级的lxml来代替。
SGMLParser有convert_entityref()
方法,但不推荐使用SGMLParser,我建议使用lxml或Beautiful Soup,它们有更好的解析器API。
SGMLParser已被弃用,因为没有人关心SGML(大多数人使用它来解析HTML,例子)。 XMLParser具有相同的接口并且不被弃用。 lxml应该真的进入stdlib。 – phihag
是的,我也不关心SGML,它看起来像是一种从html中读取数据的“简单”方式。我会研究lxml,谢谢。 – mdeland