Selenium获取div元素data-id属性值时如何避免输出None值
Selenium精准提取div元素
data-id属性值的调整方案 问题根因
当前代码通过find_elements_by_tag_name('div')拉取了页面上全部的div元素,再逐个尝试读取data-id属性。由于页面上绝大多数div都不存在data-id这个自定义属性,get_attribute()读取不存在的属性时会直接返回None,最终输出就会混杂大量无意义的空值。
优化调整思路
- 从定位环节缩小范围,不再全页面遍历div节点,直接用属性匹配选择器筛选带
data-id的目标元素,从源头杜绝无属性元素进入遍历流程 - 在属性读取环节增加空值过滤兜底,确保存入结果集的都是有效属性值
调整后的参考代码
旧版本的find_elements_by_*系列定位方法已逐步废弃,推荐使用标准Selenium定位写法,首先需要导入定位枚举类:
from selenium.webdriver.common.by import By def PID(): record = [] for page in range(1, 10): path = get_link('sugar') driver.get(path) driver.get(path.format(page)) # 精准匹配所有带data-id属性的div元素,过滤掉无目标属性的节点 target_nodes = driver.find_elements(By.CSS_SELECTOR, 'div[data-id]') for node in target_nodes: attr_value = node.get_attribute('data-id') # 兜底过滤空值,避免None混入结果 if attr_value: record.append(attr_value) print(attr_value) return record
可选精度优化
如果目标div除了自带data-id之外,还有固定的类名、结构层级特征,可以进一步收紧CSS选择器的匹配范围。比如目标div属于goods-item类名的节点,就可以把选择器改为div.goods-item[data-id],进一步避免误抓同属性的无关节点,提升提取准确率。
内容的提问来源于stack exchange,提问作者Hedge
相关产品推荐
相关产品推荐

