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

如何用Beautiful Soup解析HTML提取文件、函数及STCYC值?

解决HTML解析中关联文件、函数与指标值的问题

你当前的代码只是遍历所有<h3>、<h4>和<table>元素,但没有将它们按上下文关联起来——毕竟每个文件(<h3>)对应关联函数(<h4>),再对应后面的指标表格,是一组一组的结构,不能单独提取零散元素。

下面是针对这种不规范HTML的解析方案,核心是利用元素的顺序关系来关联对应内容:

实现步骤

  1. 遍历所有<h3>元素(每个对应一个文件);
  2. 对每个<h3>,找到它之后的第一个<h4>(关联函数);
  3. 接着找到该<h4>之后的第一个class="metricstable"的表格;
  4. 从表格中提取STCYC对应的指标值;
  5. 将三者组装成目标数据结构。

代码示例

from bs4 import BeautifulSoup

# 假设你的HTML内容存在html_content变量中
soup = BeautifulSoup(html_content, 'html.parser')

result = []

# 遍历所有h3(文件路径)
for h3 in soup.find_all('h3'):
    file_path = h3.get_text(strip=True)
    # 提取文件名(如果需要从路径中截取最后一段)
    file_name = file_path.split('/')[-1]
    
    # 找当前h3之后的第一个h4(关联函数)
    h4 = h3.find_next('h4')
    if not h4:
        continue  # 没有对应函数则跳过
    func_name = h4.get_text(strip=True)
    
    # 找当前h4之后的第一个metricstable表格
    table = h4.find_next('table', class_='metricstable')
    if not table:
        continue  # 没有对应表格则跳过
    
    # 遍历表格行,提取STCYC值
    stcyc_value = None
    for row in table.find_all('tr'):
        cells = row.find_all('td')
        # 假设第一列是指标名称,第二列是值(根据实际表格结构调整)
        if len(cells) >= 2 and cells[0].get_text(strip=True) == 'STCYC':
            stcyc_value = cells[1].get_text(strip=True)
            break
    
    if stcyc_value:
        result.append({
            '文件名': file_name,
            '关联函数': func_name,
            'STCYC值': stcyc_value
        })

# 输出结果
for item in result:
    print(item)

注意事项

  • 如果HTML结构更混乱(比如一个<h3>下有多个<h4>和对应表格),可以调整逻辑:遍历<h4>时,用h3.find_next_siblings('h4')获取该文件下的所有关联函数,再逐个找对应表格;
  • 表格的结构可能不同,需要根据实际HTML里的<tr>、<td>或<th>结构调整提取逻辑;
  • 使用get_text(strip=True)可以去除文本中的多余空格和换行符,让内容更干净。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:15:16