Python爬虫抓取HTML属性与float-right类文本报错求解
错误原因分析
- 代码1报错原因:
find_elements_by_class_name()仅支持传入单个类名,不能同时传入label genericQtipHelp两个类名,若要匹配同时包含两个类的元素,可改用CSS选择器实现find_elements_*系列方法返回的是匹配元素的列表,不能直接对列表调用__getattribute__方法,需要遍历列表对单个元素做属性操作
- 代码2报错原因:
BeautifulSoup的find()方法参数逻辑错误,属性名和属性值的位置写反,导致没有匹配到任何元素返回None,调用text属性时触发报错。
正确实现方案
你的HTML结构是每个标签项后面紧跟对应的数值项,两类元素数量一一对应,直接按顺序配对即可同时提取9组标签名和对应值:
方案1:直接用Selenium实现(无需转BeautifulSoup)
# 匹配所有标签元素 labels = driver.find_elements_by_css_selector('span.label.genericQtipHelp') # 匹配所有数值元素 values = driver.find_elements_by_css_selector('span.float-right') # 配对存储为字典,方便后续调用 result = {} for label, value in zip(labels, values): # 可根据需求保留或去除标签末尾的冒号 label_text = label.text.strip().rstrip(':') value_text = value.text.strip() result[label_text] = value_text print(f"{label_text}: {value_text}") # 输出全部9组键值对 print(result)
如果需要提取data-hasqtip属性,遍历单个标签元素时调用label.get_attribute('data-hasqtip')即可。
方案2:用BeautifulSoup解析实现
如果已经将页面源码转为BeautifulSoup对象,可使用以下写法:
# 匹配所有标签元素 labels = soup.select('span.label.genericQtipHelp') # 匹配所有数值元素 values = soup.select('span.float-right') result = {} for label, value in zip(labels, values): label_text = label.get_text(strip=True).rstrip(':') value_text = value.get_text(strip=True) result[label_text] = value_text print(f"{label_text}: {value_text}")
内容的提问来源于stack exchange,提问作者user16768885
相关产品推荐
相关产品推荐

