You need to enable JavaScript to run this app. Python 如何将爬取得到的列表转换为指定列名的DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

Python 如何将爬取得到的列表转换为指定列名的DataFrame

表格数据转结构化DataFrame实现方案

核心逻辑说明

原爬虫抓取的结果里,['']格式的空行是网页表格的视觉分隔占位行,列名/数据里夹杂的空字符串是排版分隔的占位单元格,本身没有业务价值,需要先过滤这些无效内容,再把有效数据和表头对齐,避免生成的表格出现列错位、无意义空列的问题。

实现步骤

1. 引入依赖

需要使用pandas构建DataFrame,代码顶部完成导入即可:

import pandas as pd
from bs4 import BeautifulSoup
import requests

2. 收集全量行数据

替换原循环中直接打印内容的逻辑,把所有处理过的行文本存到统一列表中,方便后续筛选:

page = requests.get("http://investors.morningstar.com/ownership/shareholders-overview.html?t=AAPL&region=idn&culture=en-US&ownerCountry=USA")
soup = BeautifulSoup(page.content, 'lxml')
quote = soup.find('table', class_='r_table2 text2 print97').find_all('tr')

raw_rows = []
for row in quote:
    cols = row.find_all('td')
    cols = [x.text.strip() for x in cols]
    raw_rows.append(cols)

3. 清洗有效内容

  • 从全量行中提取首行作为原始表头,定位表头里非空的有效列位置,剔除无意义的空占位列
  • 遍历剩余行数据,过滤掉仅含单个空字符串的无效分隔行
  • 按照有效列位置截取每行的对应内容,保证数据和表头列一一对应
# 提取原始表头
raw_header = raw_rows[0]
# 定位有效列的索引位置(即表头内容非空的列)
valid_col_index = [idx for idx, col_name in enumerate(raw_header) if col_name.strip() != ""]
cleaned_columns = [raw_header[i] for i in valid_col_index]

# 过滤无效数据行
cleaned_data = []
for row in raw_rows[1:]:
    # 跳过空分隔行
    if len(row) == 1 and row[0].strip() == "":
        continue
    # 截取有效列位置的内容,和表头对齐
    valid_row = [row[i] for i in valid_col_index]
    cleaned_data.append(valid_row)

4. 生成最终DataFrame

把清洗完成的列名和有效数据传入pandas构造函数,即可得到符合预期的结构化表格:

result_df = pd.DataFrame(cleaned_data, columns=cleaned_columns)

最终生成的表格会完全剔除原抓取结果中的空列、空行,每一列的内容和表头一一对应,不存在结构错位问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 00:06:10