Python BeautifulSoup如何精准获取score2对应的span标签值
原因说明
soup.find() 的默认逻辑是仅返回DOM中第一个匹配筛选规则的元素,因此你当前的查询代码只会定位到第一个class为percentage的span节点(即data-qa="score1"、内容为95%的节点),无法直接获取第二个目标节点。
可直接使用的实现方案
方案1:精准属性匹配(推荐,稳定性最高)
直接在find()的筛选条件中加入data-qa属性的匹配规则,一步定位目标节点,不受节点顺序变动影响:
# 匹配class为percentage、且data-qa属性值为score2的span target_node = soup.find('span', class_='percentage', attrs={'data-qa': 'score2'}) # 调用strip()清除文本前后多余的换行、空格,拿到干净结果 result = target_node.text.strip() # 输出结果为 77%
方案2:批量获取所有匹配节点后取值
用soup.find_all()替代soup.find(),该方法会返回所有符合筛选规则的节点组成的列表,既可以按索引直接取第二个节点,也可以遍历列表按属性筛选:
# 获取所有class为percentage的span节点,返回列表 all_percent_nodes = soup.find_all('span', class_='percentage') # 方式A:按索引取值,第二个节点索引为1 result = all_percent_nodes[1].text.strip() # 方式B:遍历按属性筛选,适合节点顺序可能变动的场景 for node in all_percent_nodes: if node.get('data-qa') == 'score2': result = node.text.strip() break
注意:原始HTML中目标标签的文本前后带有大量换行和缩进空白,提取文本后必须调用
.strip()处理,否则得到的结果会包含大量冗余的空白字符。
内容的提问来源于stack exchange,提问作者Lacer
相关产品推荐
相关产品推荐

