如何用BeautifulSoup收集两个<h2>标签间的兄弟节点内容?
解决BeautifulSoup收集
后续内容的问题
你的代码核心问题是在内层遍历兄弟节点时,每拼接一个元素就往列表里添加一次数据,导致同一个章节被重复存入多次,且每次的text是累积的片段而非完整内容。
修正后的代码会先把当前
到下一个
之间的所有内容拼接完成,再一次性存入列表,确保每个章节对应一条完整数据:
from bs4 import BeautifulSoup import pandas as pd chapter_data = [] for e in soup.select('h2'): chapter_content = '' # 遍历当前h2的所有后续兄弟节点 for sib in e.next_siblings: # 遇到下一个h2就停止遍历 if sib.name == 'h2': break # 拼接节点内容(若要过滤空白文本,可加判断:if str(sib).strip()) chapter_content += str(sib) # 收集完当前章节所有内容后,再存入列表 chapter_data.append({ 'chapter': e.get_text(strip=True).split()[-1], 'text': chapter_content.strip() # 可选:清理首尾空白 }) chapters = pd.DataFrame(chapter_data)
关键修改点:
- 将
chapter_data.append()从内层循环移到外层循环,确保每个仅生成一条数据
- 可选添加
.strip()清理内容首尾的空白字符,避免多余的换行或空格
内容的提问来源于stack exchange,提问作者user16950345
相关产品推荐
相关产品推荐

