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

如何向未知大小的DataFrame逐单元格插入表格爬取数据?

问题描述

现有一段可正常运行的代码,原本会打印表格单元格的内容(变量d),我希望将这个操作改为把数据插入到Pandas的DataFrame中。驱动程序从大小不固定的表格提取数据,我已经获取到了行数rc和列数cc,请问如何在遍历表格时把这些值插入DataFrame?

原始代码:

df = pd.DataFrame()

# 定位表格行
r = driver.find_elements_by_xpath("//*[@id='contentScrollPoint']/div[4]/div[4]/div[3]/div/div")
# 定位表格列
c = driver.find_elements_by_xpath("//*[@id='contentScrollPoint']/div[4]/div[4]/div[3]/div/div/table/tbody/tr[2]/td")
# 获取行数
rc = len(r)
# 获取列数
cc = len(c)
# 遍历排除表头的表格行
for i in range(2, rc+2 + 2):
# 遍历表格列
    for j in range(1, cc + 1):
# 获取单元格文本
        d = driver.find_element_by_xpath("//*[@id='contentScrollPoint']/div[4]/div[4]/div[3]/div/div/table/tbody/tr["+str(i)+"]/td["+str(j)+"]").text
        print(d) # 此处需要改为插入DataFrame
解决方案

不建议在循环里逐个单元格插入DataFrame(这种操作效率极低,因为DataFrame的结构特性会导致频繁复制数据),更高效的方式是先把所有行数据收集成嵌套列表,最后一次性转换成DataFrame。

修改后的代码如下:

import pandas as pd

# 初始化空列表,用于存储整表数据
table_data = []

# 定位表格行、列并获取行列数
r = driver.find_elements_by_xpath("//*[@id='contentScrollPoint']/div[4]/div[4]/div[3]/div/div")
c = driver.find_elements_by_xpath("//*[@id='contentScrollPoint']/div[4]/div[4]/div[3]/div/div/table/tbody/tr[2]/td")
rc = len(r)
cc = len(c)

# 遍历目标行(排除表头)
for i in range(2, rc + 2 + 2):
    # 初始化当前行的空列表
    row_data = []
    # 遍历当前行的所有列
    for j in range(1, cc + 1):
        # 使用f-string简化XPath拼接
        cell_text = driver.find_element_by_xpath(f"//*[@id='contentScrollPoint']/div[4]/div[4]/div[3]/div/div/table/tbody/tr[{i}]/td[{j}]").text
        row_data.append(cell_text)
    # 将当前行数据加入整表数据列表
    table_data.append(row_data)

# 一次性将嵌套列表转换为DataFrame
df = pd.DataFrame(table_data)

# (可选)如果需要设置表头,可以提取表头文本后传入columns参数
# 示例代码:
# headers = [header.text for header in driver.find_elements_by_xpath("//*[@id='contentScrollPoint']/div[4]/div[4]/div[3]/div/div/table/tbody/tr[1]/th")]
# df = pd.DataFrame(table_data, columns=headers)

关键修改说明

  • 用table_data和row_data两个列表暂存数据,避免循环中频繁修改DataFrame,大幅提升运行效率
  • 使用f-string格式化XPath,比传统字符串拼接更简洁、可读性更强
  • 最后一次性生成DataFrame,符合Pandas的高效使用原则
  • 附带了提取表头并设置列名的可选逻辑,按需启用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:13:18