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

Python Selenium+Pandas爬取含缺失属性的网页表格问题求助

解决Selenium爬取表格时空单元格导致的数据混乱问题

你的核心问题是全局try-except块会因单个字段异常终止整个循环,且未处理空单元格的默认值,导致数据不完整或结构混乱。以下是针对性的解决方案:

核心思路

将错误处理从「整行/整循环」缩小到「单个字段」,确保每个字段的获取失败不会影响其他字段和整行数据的保留;同时为空值/异常字段设置默认值,保证数据结构的一致性。

方案1:封装安全获取属性的辅助函数

先写一个通用函数处理单个元素的属性获取,自动捕获异常并返回默认值:

def safe_get_attr(element, attr_name='textContent', default=''):
    try:
        attr_value = element.get_attribute(attr_name)
        # 处理返回None的空单元格情况
        return attr_value if attr_value is not None else default
    except Exception:
        # 捕获元素不存在、索引越界等异常
        return default

然后修改循环代码,为每个字段单独调用这个函数:

# 不要用list作为变量名,避免覆盖Python内置类型
data_list = []
for i in range(10):
    data = {
        'ID': safe_get_attr(IDs[i]),
        'holder': safe_get_attr(holder[i]),
        'view': safe_get_attr(view[i]),
        'material': safe_get_attr(material[i]),
        'Addons': safe_get_attr(addOns[i]),
        'link': safe_get_attr(link[i], attr_name='href', default='无链接')
    }
    data_list.append(data)

方案2:按行遍历(更可靠的表格爬取方式)

如果你的IDs、holder等列表是通过find_elements分别获取的,可能存在列表长度不匹配的风险。更稳妥的方式是先遍历表格的每一行,再从行内提取对应单元格:

from selenium.webdriver.common.by import By

data_list = []
# 获取表格所有行(根据实际HTML结构调整XPath,这里跳过表头)
rows = driver.find_elements(By.XPATH, '//table//tr[position()>1]')

for row in rows:
    # 从当前行提取各单元格
    cells = row.find_elements(By.XPATH, './td')
    # 提取链接(假设链接在第6个单元格的<a>标签中)
    link_elem = row.find_elements(By.XPATH, './td[6]/a')
    
    data = {
        'ID': safe_get_attr(cells[0]) if len(cells) >= 1 else '',
        'holder': safe_get_attr(cells[1]) if len(cells) >= 2 else '',
        'view': safe_get_attr(cells[2]) if len(cells) >= 3 else '',
        'material': safe_get_attr(cells[3]) if len(cells) >= 4 else '',
        'Addons': safe_get_attr(cells[4]) if len(cells) >= 5 else '',
        'link': safe_get_attr(link_elem[0], attr_name='href', default='无链接') if link_elem else ''
    }
    data_list.append(data)

关键优化点

  • 避免全局异常捕获:原代码的try-except包裹整个循环,一旦某一行的某个字段出错,循环直接终止,后续数据全部丢失。现在每个字段单独处理异常,不会影响整行和循环。
  • 保证数据结构一致:每个字段都有默认值,不会出现字典键缺失的情况,避免后续数据处理(如转CSV、JSON)时出错。
  • 兼容空单元格:自动处理get_attribute返回None的空单元格场景,统一替换为默认值(可根据需求修改为"未知"等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:27:27