如何使用Python和BeautifulSoup将<br>分隔的段落转为多个段落
用BeautifulSoup拆分
内的
为独立
标签
有些HTML编写者会在<p>标签内使用<br>标签分隔内容,这给用BeautifulSoup抓取拆分带来了麻烦。比如原HTML结构是:
<p> part1 <br> part2 <br> part3 <br> part4 </p>
我们需要将其转换为每个内容段对应独立<p>标签的结构:
<p>part1</p> <p>part2</p> <p>part3</p> <p>part4</p>
解决方案一:保留文档结构替换
这种方法会在原BeautifulSoup文档对象中直接替换标签,适合需要继续处理其他内容的场景:
from bs4 import BeautifulSoup html = """ <p> part1 <br> part2 <br> part3 <br> part4 </p> """ soup = BeautifulSoup(html, 'html.parser') target_p = soup.find('p') # 提取所有非空白的文本片段 text_segments = [segment.strip() for segment in target_p.stripped_strings if segment.strip()] # 清空原p标签内容 target_p.clear() # 为每个文本片段创建新p标签,插入到原标签之前 for seg in text_segments: new_p = soup.new_tag('p') new_p.string = seg target_p.insert_before(new_p) # 删除原p标签 target_p.decompose() # 输出处理后的HTML print(soup.prettify())
解决方案二:直接生成目标HTML字符串
如果只需要得到最终的HTML结果,不需要维护文档对象,可以用更简洁的写法:
from bs4 import BeautifulSoup html = """ <p> part1 <br> part2 <br> part3 <br> part4 </p> """ soup = BeautifulSoup(html, 'html.parser') # 提取有效文本片段 valid_segments = [s.strip() for s in soup.p.stripped_strings if s.strip()] # 拼接成目标HTML result_html = '\n'.join(f'<p>{seg}</p>' for seg in valid_segments) print(result_html)
内容的提问来源于stack exchange,提问作者congtailai
相关产品推荐
相关产品推荐

