You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用BeautifulSoup获取含“Hello Friend ”的td的相邻td中的数值6.543

解决方案

问题根源

你的代码报错是因为soup.find("td", text=re.compile("Hello Friend "))返回了None——目标文本Hello Friend 并非直接在<td>的文本内容里,而是嵌套在<td>内部的<b>标签中,text参数只会匹配节点自身的文本,无法识别子节点里的内容,所以找不到对应的<td>。

可行方案

方案1:先定位目标<b>标签,再回溯父节点找<td>

通过找到包含目标文本的<b>标签,再获取它的父<td>,接着定位下一个兄弟<td>,最后提取数值:

import re
from bs4 import BeautifulSoup

# 假设soup是已解析完成的BeautifulSoup对象
target_b = soup.find("b", text=re.compile("Hello Friend "))
if target_b:
    # 获取包含该<b>的<td>
    source_td = target_b.parent
    # 获取下一个相邻<td>
    value_td = source_td.find_next_sibling("td")
    if value_td:
        # 提取<td>内<b>的文本并转成数值
        raw_value = value_td.find("b").get_text(strip=True)
        target_num = float(raw_value)
        print(target_num)  # 输出6.543

方案2:使用CSS选择器简化定位

利用CSS选择器的:has()和相邻兄弟选择器+,直接定位目标元素:

from bs4 import BeautifulSoup

# 用CSS选择器定位:包含指定文本<b>的<td>的下一个<td>里的<b>
target_element = soup.select_one('td:has(b:contains("Hello Friend ")) + td b')
if target_element:
    target_num = float(target_element.get_text(strip=True))
    print(target_num)  # 输出6.543

注意事项

  • 确保你的BeautifulSoup版本支持:has()选择器(需要BeautifulSoup 4.7.0及以上版本)
  • 加入if判断可以避免因节点不存在导致的报错,增强代码鲁棒性

内容的提问来源于stack exchange,提问作者aeiou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:55:25