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

使用BeautifulSoup的.find命令爬取Yahoo Finance数据返回None的解决方法

解决Yahoo Finance抓取fin-streamer标签返回None的问题

可能的原因及对应解决方案

1. 请求未模拟浏览器,被网站拦截/返回简化内容

Yahoo Finance会根据请求头判断请求来源,直接用requests.get发送的请求没有浏览器标识,可能返回不包含目标标签的静态内容。

解决办法:添加User-Agent请求头模拟浏览器:

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'
}
r = requests.get(url, headers=headers)

2. 目标内容是JavaScript动态渲染的

requests只能获取初始HTML,而Yahoo Finance的实时股价等数据是通过JavaScript动态加载到fin-streamer标签中的,初始静态HTML里可能没有该标签的内容,甚至标签本身可能是JS生成的。

解决办法:使用Selenium模拟浏览器加载页面(需先安装Selenium和对应浏览器驱动,比如ChromeDriver):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time

# 配置Chrome无头模式
chrome_options = Options()
chrome_options.add_argument('--headless=new')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('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')

driver = webdriver.Chrome(options=chrome_options)
driver.get(url)

# 等待页面加载完成
time.sleep(2)

web_content = BeautifulSoup(driver.page_source, 'lxml')
# 定位目标股价的fin-streamer标签
section = web_content.find('fin-streamer', {'data-test': 'qsp-price'})
print(section.text if section else '未找到目标标签')

driver.quit()

3. 标签定位不够精确

直接find('fin-streamer')可能匹配不到目标标签,页面中可能存在多个fin-streamer,需要结合属性筛选。根据你要抓取的股价(对应截图内容),可以通过data-test或class属性精准定位:

# 通过data-test属性定位股价标签
section = web_content.find('fin-streamer', {'data-test': 'qsp-price'})
# 或者通过class属性定位
section = web_content.find('fin-streamer', class_='Fw(b) Fz(36px) Mb(-4px) D(ib)')

额外建议

  • 检查返回内容:可以先把r.text保存到本地文件,查看是否真的包含fin-streamer标签,确认是请求问题还是定位问题。
  • 控制请求频率:Yahoo Finance有反爬机制,频繁请求可能被封禁IP,建议添加请求间隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:42:38