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

如何用BeautifulSoup获取相邻th对应的td文本?

解决BeautifulSoup获取ETF Risk对应文本的问题

问题原因

你的代码失败主要有两个核心原因:

  • 页面中<th>的文本并非完全等于"ETF Risk",可能包含前后空格、换行符,导致精确匹配失效。
  • 未添加请求头模拟浏览器访问,被网站反爬机制拦截,获取的页面内容不完整。

修正后的代码

import requests
from bs4 import BeautifulSoup

url = "https://www.zacks.com/funds/etf/VTI/profile?q=vti"
# 添加请求头模拟浏览器访问,避免反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

# 用lambda模糊匹配包含目标文本的<th>,兼容文本格式差异
risk_th = soup.find('th', string=lambda x: x and "ETF Risk" in x.strip())
if risk_th:
    # 查找相邻的<td>元素
    risk_td = risk_th.find_next_sibling('td')
    if risk_td:
        risk_text = risk_td.text.strip()
        print(risk_text)  # 输出结果为 "Med"
    else:
        print("未找到对应ETF Risk的<td>元素")
else:
    print("未找到包含ETF Risk的<th>元素")

关键修正点

  • 模糊匹配文本:用lambda x: x and "ETF Risk" in x.strip()替代精确匹配,兼容文本中的空格、换行等格式差异。
  • 添加请求头:模拟浏览器请求,确保获取完整的页面结构,避免被反爬拦截。
  • 容错处理:增加元素存在性判断,避免因元素缺失导致的代码报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:22:07