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

Python循环生成列表遇空值时,如何填充指定文本?

问题

我现有如下基于Selenium的Python代码:

for car in car_list:
    specs = car.find_elements(By.XPATH, ".//li[@class='sc-kcuKUB bMKvpn']")
    car_specs = []
    for spec in specs:
            entry = spec.get_attribute('innerHTML')
            entry = spec.text
            car_specs.append(entry)
    all_specs.append(car_specs)

该代码可生成正常的车辆规格列表,输出示例:

print(all_specs)

['2021 (21 reg)', 'SUV', '35,008 miles', '395BHP', 'Automatic', 'Electric', '1 owner'] [['2021 (21 reg)', 'SUV', '35,008 miles', '395BHP', 'Automatic', 'Electric', '1 owner']]

但部分车辆规格为空时会生成空列表,输出示例:

['2021 (21 reg)', 'SUV', '35,008 miles', '395BHP', 'Automatic', 'Electric', '1 owner'] [['2021 (21 reg)', 'SUV', '35,008 miles', '395BHP', 'Automatic', 'Electric', '1 owner'] []]

(注:末尾存在空列表)

这导致在拼接DataFrame时出现行转置问题,因为该DataFrame包含空列表,而另一个没有。我曾尝试如下代码但未解决:

for spec in specs:
        if spec is None:
            car_specs.append('texthere')
        else:
            entry = spec.get_attribute('innerHTML')
            entry = spec.text
            car_specs.append(entry)

请问如何在spec或specs为空时,填充指定文本以确保列表不为空?


解决方案

你的问题核心是没判断specs本身是否为空——find_elements返回的是空列表而非None,所以之前判断spec is None完全无效,循环根本不会执行,直接就把空的car_specs加入了结果。

基础解决方法(空列表时填充单个占位文本)

修改思路:先判断specs是否为空,为空则直接添加填充文本;不为空则正常遍历提取内容。同时可以删掉冗余的get_attribute('innerHTML')(因为后面被spec.text覆盖了)。

修改后的代码:

for car in car_list:
    specs = car.find_elements(By.XPATH, ".//li[@class='sc-kcuKUB bMKvpn']")
    car_specs = []
    if not specs:  # 判断specs是否为空列表
        car_specs.append('无车辆规格信息')  # 替换成你需要的填充文本
    else:
        for spec in specs:
            car_specs.append(spec.text)
    all_specs.append(car_specs)

进阶解决方法(保证列表长度一致)

如果需要每个车辆的规格列表长度和正常数据一致(避免DataFrame拼接时的维度问题),可以先明确正常规格的字段数量,空列表时补充对应数量的填充文本:

EXPECTED_SPEC_COUNT = 7  # 根据正常数据的字段数设置,比如示例里是7个
FILL_TEXT = '无信息'

for car in car_list:
    specs = car.find_elements(By.XPATH, ".//li[@class='sc-kcuKUB bMKvpn']")
    car_specs = [spec.text for spec in specs]
    # 补充缺失的字段,保证列表长度统一
    if len(car_specs) < EXPECTED_SPEC_COUNT:
        car_specs += [FILL_TEXT] * (EXPECTED_SPEC_COUNT - len(car_specs))
    all_specs.append(car_specs)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:42:04