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

Python将爬取所得用户名列表拆分填充两个列表 避免索引越界报错

原始问题

以下代码目前可正常运行,能够打印我爬取得到的用户。但我的目标是拆分存储所有用户名的列表,将第一个用户名存入users_involved(后续将作为DataFrame的一列),第二个存入users_involved2(同样为DataFrame列)。最终效果为两列分别存储user_name列表中爬取到的各个用户名。我此前尝试使用本地列表仅取[0]和[1]分别对应两列,小数据量下可正常运行,但处理大输入时程序崩溃抛出list_index out of range错误。请问大家有什么可行的解决方案?注:参数size为DataFrame的长度,我会先填充列表再基于列表创建DataFrame列。

原始代码:

'''Loop bootom elements to find Users and Clients'''
user_name = [None] * size
users_involved = [None] * size
users_involved_2 = [None] * size

elements_process = driver.find_elements_by_class_name("ElementIwasLooking")
for el in elements_process:
    links = el.find_elements_by_css_selector('p')
    for phrase in links:
        if (phrase.text.startswith("User:")):
            user_name[i] = phrase.text[10:]
            users_involved[i] = user_name[i]
            print(users_involved[i])

解决方案

错误诱因

你遇到的越界错误主要来自三个问题:

  • 原代码没有对行索引i做合法范围控制,索引值很容易超出预设的列表长度size
  • 没有对单个元素下匹配到的用户名数量做校验,部分元素下可能只有1个甚至没有匹配的User,直接按下标取[0][1]就会触发越界
  • 预生成固定长度None列表的方式容错性低,爬取数据量和预设size不匹配时直接报错

修正后代码

调整遍历逻辑,按行对应每个目标元素,动态收集每个元素下的用户名再分别赋值给两个存储列表,最后统一对齐到DataFrame长度即可:

'''Loop bottom elements to find Users and Clients'''
# 先动态收集数据,不要提前固定长度
users_involved = []
users_involved_2 = []

elements_process = driver.find_elements_by_class_name("ElementIwasLooking")
# 每个元素对应DataFrame的一行
for el in elements_process:
    # 先收集当前元素下的所有用户名
    current_users = []
    links = el.find_elements_by_css_selector('p')
    for phrase in links:
        if phrase.text.startswith("User:"):
            # 用removeprefix代替固定下标切片,避免前缀空格长度变化导致取值错误
            user = phrase.text.removeprefix("User: ").strip()
            current_users.append(user)
    # 分别赋值给两个列表,不足的位置自动填None
    users_involved.append(current_users[0] if len(current_users)>=1 else None)
    users_involved_2.append(current_users[1] if len(current_users)>=2 else None)

# 最后对齐到你需要的DataFrame长度size,多的截断少的补None
if len(users_involved) < size:
    users_involved += [None]*(size - len(users_involved))
    users_involved_2 += [None]*(size - len(users_involved_2))
else:
    users_involved = users_involved[:size]
    users_involved_2 = users_involved_2[:size]

# 后续直接用这两个列表生成DataFrame即可

内容的提问来源于stack exchange,提问作者Gustavo Gobetti Bertocco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:06:05