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

Yahoo Finance BTC-USD日涨跌幅爬取异常:固定返回-661.20求助

问题排查:Yahoo Finance BTC-USD日涨跌幅爬取数值固定的问题

问题描述

尝试爬取Yahoo Finance上BTC-USD的日涨跌幅数值,运行代码后返回结果始终固定为-661.20,与网页实时显示数值不符。用户代码如下:

import requests, json
from bs4 import BeautifulSoup

btc_url = 'https://finance.yahoo.com/quote/BTC-USD'
btc_page = requests.get(btc_url)
btc_soup = BeautifulSoup(btc_page.content, 'html.parser')
btc_change = btc_soup.find('div' , class_='D(ib) Mend(20px)').find('fin-streamer' ,class_ ='Fw(500) Pstart(8px) Fz(24px)').text
print (btc_change)

原因分析

Yahoo Finance当前的行情数据采用JavaScript动态加载机制:直接用requests获取的是页面初始HTML,其中包含的是静态占位数据(或缓存的旧数据),并非实时更新的行情数值。实时数据是页面加载完成后通过AJAX请求从后端接口拉取的,因此静态解析HTML无法获取最新值。

解决方案

方案1:使用Selenium模拟浏览器加载动态内容

通过模拟浏览器完整渲染页面,等待JavaScript加载完成后再提取数据:

  1. 安装依赖:
pip install selenium
  1. 下载对应浏览器的驱动(如ChromeDriver)并配置到环境变量中,或在代码中指定路径。
  2. 示例代码:
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()  # 若驱动不在环境变量,需指定executable_path参数
driver.get('https://finance.yahoo.com/quote/BTC-USD')

# 等待目标元素加载完成
wait = WebDriverWait(driver, 10)
btc_change = wait.until(EC.presence_of_element_located(
    (By.CSS_SELECTOR, 'div.D(ib).Mend(20px) fin-streamer.Fw(500).Pstart(8px).Fz(24px)')
)).text

print(btc_change)
driver.quit()

方案2:使用Yahoo Finance官方API封装库(推荐)

使用yfinance库直接调用官方接口,无需页面解析,更稳定高效:

  1. 安装依赖:
pip install yfinance
  1. 示例代码:
import yfinance as yf

btc = yf.Ticker("BTC-USD")
# 获取最新单日行情数据
hist = btc.history(period="1d")
# 计算日涨跌幅数值
daily_change = hist['Close'].iloc[-1] - hist['Open'].iloc[-1]
# 获取日涨跌幅百分比
daily_change_pct = btc.info['regularMarketChangePercent'] * 100

print(f"日涨跌幅数值: {daily_change:.2f}")
print(f"日涨跌幅百分比: {daily_change_pct:.2f}%")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:18:21