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®ion=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
相关产品推荐
相关产品推荐

