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

尝试爬取Yahoo Finance标普500数据遭限制,求解决方案

解决Yahoo Finance标普500历史数据爬取限制的方法
  • 模拟真实浏览器请求
    Yahoo的反爬机制会识别非浏览器请求,给请求头加上真实的用户代理、语言偏好等参数,伪装成正常用户访问。示例代码:

    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',
        'Accept-Language': 'en-US,en;q=0.9'
    }
    url = 'https://finance.yahoo.com/quote/%5EGSPC/history/?period1=1574074965&period2=1731927744'
    response = requests.get(url, headers=headers)
    

    还可以加上Referer字段,模拟从Yahoo首页跳转的请求,进一步降低被拦截概率。

  • 用第三方合规库直接调用
    自己写爬虫容易踩反爬坑,不如用封装好的专业库,这些库已内置反爬处理逻辑:

    • 使用yfinance(当前最活跃的Yahoo Finance数据获取工具):
      import yfinance as yf
      sp500 = yf.Ticker("^GSPC")
      # 获取近5年数据,也可指定start/end日期精准获取
      hist_data = sp500.history(period="5y")
      
    • 或者pandas-datareader(适配pandas的数据分析场景):
      import pandas_datareader as pdr
      hist_data = pdr.get_data_yahoo('^GSPC', start='2019-11-18', end='2024-11-18')
      
  • 维持会话与Cookie
    Yahoo会通过会话Cookie验证用户合法性,用requests.Session()维持会话,先访问首页获取Cookie,再请求数据页面:

    import requests
    session = requests.Session()
    # 先访问首页获取会话Cookie
    session.get('https://finance.yahoo.com')
    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'}
    response = session.get(url, headers=headers)
    
  • 控制请求频率
    短时间内频繁请求会触发反爬,每次请求后加1-3秒延迟:

    import time
    time.sleep(2)  # 请求间隔2秒
    
  • 直接调用内部API接口
    打开浏览器开发者工具(F12)切换到「网络」标签,刷新数据页面,找到返回JSON格式数据的XHR请求(通常含history关键字),复制该请求的URL、请求头和参数直接调用,比解析HTML更高效,也更难被拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:35:07