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

如何从不同长度的HTML表格中精准抓取指定字段?

解决HTML表格表头与行长度不一致的字段抓取问题

核心思路是先建立目标表头字段和对应列位置的映射,不管每行的单元格数量多少,都严格按照表头的位置去提取内容,避免因列数不匹配导致的错位。

修正后的脚本示例

from bs4 import BeautifulSoup

def extract_table_fields(html_content, target_fields):
    soup = BeautifulSoup(html_content, 'html.parser')
    table = soup.find('table')
    if not table:
        return []
    
    # 解析表头,构建字段到列索引的映射
    header_row = table.find('tr')
    headers = [th.get_text(strip=True) for th in header_row.find_all('th')]
    # 只保留需要的字段对应的索引
    field_index_map = {field: idx for idx, field in enumerate(headers) if field in target_fields}
    
    # 遍历数据行提取内容
    extracted_data = []
    for row in table.find_all('tr')[1:]:  # 跳过表头行
        cells = [td.get_text(strip=True) for td in row.find_all('td')]
        row_data = {}
        for field, idx in field_index_map.items():
            # 处理行单元格数量不足的情况,避免索引越界
            row_data[field] = cells[idx] if idx < len(cells) else ''
        extracted_data.append(row_data)
    
    return extracted_data

# 模拟你提到的html_table1测试
html_table1 = """
<table>
  <tr>
    <th>姓名</th>
    <th>年龄</th>
    <th>城市</th>
  </tr>
  <tr>
    <td>张三</td>
    <td>25</td>
  </tr>
  <tr>
    <td>李四</td>
    <td>30</td>
    <td>北京</td>
    <td>额外信息</td>
  </tr>
</table>
"""

# 指定要抓取的字段
targets = ['姓名', '年龄', '城市']
result = extract_table_fields(html_table1, targets)
print(result)

关键说明

  • 先解析表头生成字段-索引映射,只保留你需要的字段,过滤无关表头
  • 遍历每行时,先获取所有单元格内容,再根据映射的索引提取对应内容
  • 加入索引越界判断:如果当前行的单元格数量小于目标索引,就返回空字符串,避免报错或错位

运行示例代码后,输出结果会精准对应字段:

[{'姓名': '张三', '年龄': '25', '城市': ''}, {'姓名': '李四', '年龄': '30', '城市': '北京'}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:40:02