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

如何从HTML提取数据生成以类名为键的字典 适配Selenium/BeautifulSoup场景

方案说明

该需求完全可实现,以下分别提供静态页面和动态页面两种场景的实现方案:


方案1:BeautifulSoup实现(适用静态HTML场景)

无需启动浏览器,直接解析HTML源码即可,实现代码如下:

from bs4 import BeautifulSoup
from collections import defaultdict

def extract_text_by_class(html_content):
    result = defaultdict(list)
    soup = BeautifulSoup(html_content, 'html.parser')
    # 查找所有带有class属性的元素
    for element in soup.find_all(attrs={"class": True}):
        # 处理单个元素多个类名的情况
        class_list = element.get("class")
        # 提取元素文本,去掉首尾空白
        text = element.get_text(strip=True)
        for cls in class_list:
            # 可在此处加类名过滤规则,只保留你需要的目标类,避免存入a1这类不需要的父类
            result[cls].append(text)
    return dict(result)

# 测试用例
test_html = """
<div class="a1">
    <H1 class="title">1_title</H1>
        <a class="text">this is a text 1</a>
    <a class="text">this is a text 2</a>
    <H2 class="title">2_title</H2>
        <p class="note"> this is a note</p>
</div>
"""
print(extract_text_by_class(test_html))
# 输出符合预期:{'title': ['1_title', '2_title'], 'text': ['this is a text 1', 'this is a text 2'], 'note': ['this is a note']}(过滤a1类后)

方案2:Selenium实现(适用JS动态渲染场景)

如果页面内容是JS动态加载的,用Selenium启动浏览器加载完成后再提取即可,实现代码如下:

from collections import defaultdict
from selenium import webdriver
from selenium.webdriver.common.by import By

def extract_text_by_class_selenium(url):
    result = defaultdict(list)
    driver = webdriver.Chrome()
    driver.get(url)
    # 等待页面加载完成,可根据页面情况调整等待时长或替换为显式等待
    driver.implicitly_wait(10)
    # 查找所有带class属性的元素
    elements = driver.find_elements(By.XPATH, '//*[@class]')
    for ele in elements:
        class_attr = ele.get_attribute('class')
        if not class_attr:
            continue
        # 拆分多类名
        class_list = class_attr.strip().split()
        text = ele.text.strip()
        for cls in class_list:
            # 可在此处加类名过滤规则
            result[cls].append(text)
    driver.quit()
    return dict(result)

注意事项

  • 两种方案的遍历逻辑都是按DOM节点在页面的先后顺序读取,天然满足有序提取的需求
  • 如果元素文本包含换行等特殊格式,可以按需调整strip()的逻辑,保留需要的格式
  • 如果存在嵌套元素文本重复提取的问题,可以限定遍历的元素层级,只提取目标层级的元素即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:24:03