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

