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

如何使用Beautiful Soup提取列结构不规则的HTML表格指定内容

不规则HTML表格分段提取解决方案

实现思路

  • 定位目标表格后逐行遍历,优先判断每行内是否存在columnspan属性为6的td元素,作为分段边界
  • 用状态标记位区分当前行所属的分段区间,分别存储对应区间的行数据
  • 自动适配前段3列内容的不定行数,无需硬编码行数阈值

可直接运行的修改代码

import pandas as pd
import requests
from bs4 import BeautifulSoup

url = "替换为你的目标网页地址"

page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
# 定位首个表格
target_table = soup.find_all('table')[0]

# 分别存储跨列行前3列内容、跨列行后4列内容
before_colspan_rows = []
after_colspan_rows = []
# 状态标记:是否已经遇到columnspan=6的行
meet_6col_span = False

for tr in target_table.find_all('tr'):
    # 先判断当前行是否存在columnspan=6的td
    colspan_6_td = tr.find('td', attrs={'colspan': '6'})
    if colspan_6_td:
        meet_6col_span = True
        # 如果需要保留跨列行内容可以自行添加存储逻辑,此处跳过跨列行
        continue
    
    # 提取当前行所有td的文本
    row = []
    for td in tr.find_all('td'):
        row.append(td.text.replace('\n', '').strip())
    
    # 过滤空行
    if not row:
        continue
    
    # 按状态存入对应列表
    if not meet_6col_span:
        before_colspan_rows.append(row)
    else:
        after_colspan_rows.append(row)

# 分别导出两个分段的DataFrame
df_before = pd.DataFrame(before_colspan_rows)
df_after = pd.DataFrame(after_colspan_rows)

# 可自行选择导出为csv或者打印查看
# df_before.to_csv('前3列段数据.csv', index=False, encoding='utf-8-sig')
# df_after.to_csv('后4列段数据.csv', index=False, encoding='utf-8-sig')

自定义调整说明

  • 如果需要提取所有columnspan=6行分隔的多段内容,可以把分段存储改为列表嵌套结构,每遇到一次跨列行就新建一个分段存储列表
  • 如果跨列行本身的内容也需要保留,删除代码中跨列行判断后的continue语句,新增对应存储逻辑即可
  • 如果需要过滤后续其他跨列单列表行,可增加对行长度的判断,仅保留长度为4的行存入after_colspan_rows

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:03