You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:11