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

使用BeautifulSoup无法获取CNN恐惧与贪婪指数数值的问题求助

解决CNN恐惧与贪婪指数爬虫无法获取数值的问题

问题核心是页面数值由JavaScript动态渲染填充:你用requests获取的是服务器返回的原始静态HTML,此时目标<span>标签还没有数值内容;而Chrome开发者工具展示的是浏览器执行完所有JS脚本后的最终DOM结构,所以能看到填充后的数值。

下面提供两种可行的解决方案:

方案1:直接请求数据API(推荐)

CNN的恐惧与贪婪指数数据是通过独立的API接口返回的,直接调用该接口无需处理页面渲染,效率更高:

import requests

url = "https://production.dataviz.cnn.io/index/fearandgreed/graphdata"
headers = {
    'User-Agent': '你的个人User-Agent'
}

response = requests.get(url, headers=headers)
data = response.json()

# 提取当前指数数值及对应评级
current_score = data['fear_and_greed']['score']
current_rating = data['fear_and_greed']['rating']

print(f"恐惧与贪婪指数: {current_score} ({current_rating})")

方案2:用Selenium模拟浏览器加载页面

如果需要模拟完整的浏览器渲染流程,可以使用Selenium工具,它会自动执行页面JS并返回最终DOM:

  1. 先安装依赖:
pip install selenium
  1. 编写爬虫代码(需提前安装对应浏览器驱动,如ChromeDriver):
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

url = "https://edition.cnn.com/markets/fear-and-greed"
user_agent = '你的个人User-Agent'

# 配置Chrome浏览器选项,启用无头模式(不显示窗口)
options = webdriver.ChromeOptions()
options.add_argument('--headless=new')
options.add_argument(f'user-agent={user_agent}')

# 启动浏览器并访问页面
driver = webdriver.Chrome(options=options)
driver.get(url)

# 等待目标元素加载完成
wait = WebDriverWait(driver, 10)
target_element = wait.until(
    EC.presence_of_element_located((By.CLASS_NAME, "market-fng-gauge__dial-number-value"))
)

# 提取数值
fear_greed_value = target_element.text
print(f"恐惧与贪婪指数: {fear_greed_value}")

# 关闭浏览器
driver.quit()

两种方案对比:

  • API方案:速度快、资源占用低,适合批量或定时爬取;
  • Selenium方案:完全模拟浏览器行为,适配更复杂的动态页面,但需要额外安装驱动,速度较慢。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:50:24