使用BeautifulSoup提取每个h2对应class为wildlife的p标签及其后续兄弟节点
问题原因
你代码的问题出在find_next_siblings('p', class_='wildlife')会匹配当前<h2>之后所有符合条件的同级<p>标签,不会自动在遇到下一个<h2>时停止,所以才会把后一个分类下的内容也误提取到前一个分类中。
解决方法
你可以遍历当前<h2>之后的所有同级节点,遇到下一个<h2>就终止遍历,仅处理两个<h2>之间的内容,就可以避免越界问题,代码如下:
from bs4 import BeautifulSoup # 此处省略你读取HTML生成soup对象的原有代码 for h2 in soup.find_all('h2'): # 输出分类一级标题 print(f"# {h2.text.strip()}") # 遍历当前h2之后的所有同级节点 for node in h2.next_siblings: # 遇到下一个h2就停止,不处理后续分类的内容 if node.name == 'h2': break # 仅筛选class为wildlife的p标签 if node.name == 'p' and 'wildlife' in node.get('class', []): # 输出物种二级标题 print(f"## {node.text.strip()}") # 获取下一个同级p标签作为描述输出 desc_node = node.find_next_sibling('p') if desc_node: print(desc_node.text.strip()) # 分类之间加空行分隔 print()
运行上述代码即可生成你需求的目标Markdown内容。
内容的提问来源于stack exchange,提问作者dwids
相关产品推荐
相关产品推荐

