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

如何在BeautifulSoup中嵌套使用find_all提取指定HTML内容

解决BeautifulSoup嵌套筛选指定表格内的目标标签问题

需求很明确:从class为nested4的表格中,定位样式为margin: 0; text-align: left; padding-left: 5px的<p>标签,再提取该段落里的所有<span>标签。

原代码的问题

你之前的代码每次都直接用soup.find_all全局查找,不仅会覆盖之前的结果,还会拿到整个HTML里的匹配标签,完全没实现“在指定表格里找p,再在p里找span”的嵌套筛选逻辑。

正确实现方式

核心思路是缩小查找范围:先定位到目标表格,再在表格内部找目标p标签,最后在每个p标签内部找span标签。

完整代码

from bs4 import BeautifulSoup

# 假设string是你的HTML内容
soup = BeautifulSoup(string, 'html.parser')

# 第一步:找到所有class为nested4的表格(如果只有一个,用find()更高效)
target_tables = soup.find_all('table', class_='nested4')

# 遍历每个目标表格
for table in target_tables:
    # 第二步:在当前表格范围内,找到符合样式的p标签
    target_paragraphs = table.find_all('p', style='margin: 0; text-align: left; padding-left: 5px')
    
    # 遍历每个目标段落
    for p in target_paragraphs:
        # 第三步:在当前段落范围内,找到所有span标签
        span_tags = p.find_all('span')
        
        # 可以进一步提取span的文本内容,比如:
        for span in span_tags:
            # 去掉前后空白字符
            text = span.get_text(strip=True)
            if text:  # 跳过空的span
                print(text)

代码说明

  • 定位目标表格:用soup.find_all('table', class_='nested4')拿到所有符合条件的表格,如果你确定页面只有一个这样的表格,改用soup.find('table', class_='nested4')可以直接拿到单个表格对象,不用循环。
  • 缩小范围找p标签:不再用全局的soup.find_all,而是用table.find_all(...),这样只会在当前表格内部查找匹配的p标签。
  • 在p标签内找span:同理,用p.find_all('span')限定在当前段落内部查找,完全不会拿到其他地方的span。

示例输出

运行上面的代码,针对你提供的HTML,会输出:

NAME & ADDRESS
MUHAMMAD AMIN
S/O MUHAMMAD KHAN
H-NO.38 MARGALLA ROAD
F-6/3 ISLAMABAD3

内容的提问来源于stack exchange,提问作者Ibrahim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:36:14