使用BeautifulSoup提取含<br>标签的字符串返回None,如何提取目标文本
问题原因
.string仅在标签仅包含单个文本子节点时会返回对应文本内容。你提供的<p>标签内包含多个子节点(文本节点xxx、<br/>标签、文本节点yyy、<br/>标签),不符合.string的使用条件,因此返回None。删除后续内容后<p>标签只剩单个文本子节点,.string就可以正常返回结果。
解决方法
这里提供两种常用的提取方案:
方案1:通过contents取首个子节点
contents会以列表形式返回标签下的所有直接子节点,首个子节点就是你要的xxx文本节点,提取后做去空格处理即可:
from bs4 import BeautifulSoup soup = BeautifulSoup('<p class="object-attr-value"> xxx <br/> yyy <br/></p>', 'html.parser') t = soup.p.contents[0].strip()
执行后t的值就是xxx。
方案2:通过strings生成器取首个文本
strings会遍历标签下的所有文本节点,直接取首个生成的内容即可:
t = next(soup.p.strings).strip()
内容的提问来源于stack exchange,提问作者Sanya Pushkar
相关产品推荐
相关产品推荐

