使用Beautiful Soup获取指定span后续元素失败,求解决方案
问题分析与解决方法
问题原因
你调用find("span", string="Diesen Monat:").next_sibling拿不到目标<span class="parValue">,核心原因是:两个span之间的空格、换行等空白字符属于独立的文本节点,next_sibling会优先返回这个文本节点,而非你需要的元素节点。
可行解决方法
以下几种方式都能准确获取目标值:
方法1:用find_next()直接定位下一个span元素
跳过中间的空白文本,直接查找后续第一个符合条件的span元素:
target_span = soup.find("span", string="Diesen Monat:").find_next("span", class_="parValue") print(target_span.get_text()) # 输出:67.54 kWh
方法2:遍历next_siblings筛选元素节点
遍历所有后续兄弟节点,过滤出元素类型的节点:
par_name_span = soup.find("span", string="Diesen Monat:") for sibling in par_name_span.next_siblings: if sibling.name == "span": print(sibling.get_text()) # 输出:67.54 kWh break
方法3:使用CSS相邻兄弟选择器
用+选择器直接选中目标元素(需Beautiful Soup 4.7.0及以上版本支持:contains()伪类):
target_span = soup.select_one('span:contains("Diesen Monat:") + span.parValue') print(target_span.get_text())
如果你的Beautiful Soup版本较低,可先定位到parName元素再用相邻选择器:
par_name_span = soup.find("span", string="Diesen Monat:") target_span = par_name_span.find_next_sibling("span", class_="parValue")
内容的提问来源于stack exchange,提问作者Michael Roebbeling
相关产品推荐
相关产品推荐

