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

如何处理跨多行分布数据的HTML表格并导入pandas DataFrame

解决多行分布的HTML表格转pandas DataFrame问题

你遇到的这种每行对应一个字段键值对的表格,直接用pd.read_html确实会把每个字段拆成零散的行,没法直接得到结构化的DataFrame。我给你整理了一套实用的处理方案:

步骤1:解析表格行并提取键值对

首先我们要遍历BeautifulSoup拿到的所有表格行,跳过开头的记录数行,把每行里的字段名和对应值提取出来,整理成字典:

from bs4 import BeautifulSoup
import pandas as pd

# 假设你已经有了解析好的soup对象,先定位到目标表格
table = soup.find('table')
rows = table.find_all('tr')

# 初始化字典存储单条记录的键值对
record_data = {}

# 跳过第一行("Record : 1 of 749" 这条无关数据)
for row in rows[1:]:
    cells = row.find_all('td')
    # 确保当前行有足够的单元格(字段名、冒号、值)
    if len(cells) >= 3:
        # 提取字段名,去掉多余空格
        field_name = cells[0].get_text(strip=True)
        # 提取字段值(示例里值在第3个td,索引为2)
        field_value = cells[2].get_text(strip=True)
        record_data[field_name] = field_value

步骤2:转成结构化DataFrame

把整理好的字典转成DataFrame即可,如果是单条记录,记得把字典放到列表里:

df = pd.DataFrame([record_data])

处理多条记录的情况

如果页面里有749条这类记录(对应示例里的"Record : 1 of 749"),你可以循环处理每个记录对应的表格,把每个记录的字典都加到列表里,最后统一转成DataFrame:

all_records = []

# 假设你能定位到所有记录的表格(比如用soup.find_all('table'))
for table in soup.find_all('table'):
    rows = table.find_all('tr')
    record_data = {}
    for row in rows[1:]:
        cells = row.find_all('td')
        if len(cells) >=3:
            field_name = cells[0].get_text(strip=True)
            field_value = cells[2].get_text(strip=True)
            record_data[field_name] = field_value
    # 确保字典不为空再加入列表
    if record_data:
        all_records.append(record_data)

df = pd.DataFrame(all_records)

小提示

  • 如果遇到结构特殊的行(比如缺少冒号单元格),可以加额外的判断逻辑跳过或灵活处理
  • get_text(strip=True)能帮你去掉文本前后的空格和换行,让数据更干净

内容的提问来源于stack exchange,提问作者O. Snow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:30:34