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

soup.find定位存在的HTML路径返回None,雅虎财经ESG爬取问题求助

问题排查与解决方法

核心原因

  • 反爬拦截:雅虎财经对未携带浏览器标识的请求会直接返回拦截页面,你打印的succes只是代表请求没有报错,但返回的内容不是你在浏览器看到的正常可持续发展页面,自然找不到对应类名的div元素。
  • 动态渲染:雅虎财经的ESG评分数据是通过JavaScript动态加载的,你直接请求拿到的原始静态HTML里不存在这个元素,只有当浏览器执行完JS渲染后才会生成对应节点,这就是你在开发者工具里能看到路径,但BeautifulSoup找不到的核心原因。

修复方案

方案1:添加请求头+找数据接口(推荐,性能最高)

首先给请求添加User-Agent伪装成浏览器,然后可以通过浏览器开发者工具的网络面板找到返回ESG数据的API接口,直接请求接口获取结构化的JSON数据,不需要解析HTML。
基础修改后的代码示例:

from bs4 import BeautifulSoup
import requests

# 加请求头伪装成普通浏览器请求
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

try: 
    resp = requests.get('https://finance.yahoo.com/quote/FB/sustainability?p=FB', headers=headers)
    resp.raise_for_status() # 请求状态码异常时会直接抛出错误,避免拿到无效页面
    ESG_data = resp.text
    print('请求成功')
except:
    print('Could not retrive')

# 可以先打印ESG_data查看是否存在你要找的类名,不存在就说明是动态渲染,改用下面的方案2

方案2:使用模拟浏览器工具(适合新手,不需要找接口)

用Selenium这类工具启动真实浏览器,等页面加载完成后再提取元素:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get('https://finance.yahoo.com/quote/FB/sustainability?p=FB')
# 最多等待10秒,直到目标元素加载完成
try:
    esg_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, 'div.Fz\(36px\).Fw\(600\).D\(ib\).Mend\(5px\)'))
    )
    print(esg_element.text)
finally:
    driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:54:05