如何让Beautiful Soup提取包含HTML格式标签的文本?
解决方案
问题出在你使用了.text属性——这个方法会提取节点的纯文本内容,自动剥离所有HTML标签。要保留格式标签,你需要获取兄弟节点的原始HTML代码,而不是纯文本。
你可以直接将每个兄弟节点转换为字符串(BeautifulSoup会自动将节点转为对应的HTML代码),修改后的代码如下:
from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') # 建议显式指定解析器 for e in soup.select('b'): formatted_content = '' for sib in e.next_siblings: formatted_content += str(sib)
或者用更简洁的生成器表达式拼接:
for e in soup.select('b'): formatted_content = ''.join(str(sib) for sib in e.next_siblings)
关键说明
str(sib):将单个兄弟节点(包括其自身标签、子标签以及文本内容)完整转换为HTML字符串,比如<font color="red">示例<sup>文本</sup></font>会被完整保留。- 如果你只需要节点内部的HTML内容(不包含节点自身的标签),可以改用
sib.decode_contents()方法,比如对于上面的节点,会返回示例<sup>文本</sup>。
内容的提问来源于stack exchange,提问作者user16950345
相关产品推荐
相关产品推荐

