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

使用requests请求Yahoo Screener数据遇Invalid Crumb错误,能否实现?

解决Yahoo Screener接口请求的Invalid Crumb问题

可以用requests实现,但你遇到的Invalid Crumb问题是因为Yahoo的crumb和会话Cookie强绑定,且二者都有时效性,直接复用旧的Cookie和crumb必然失效。以下是可行的解决方案:

  • Crumb与Cookie必须同会话获取:Yahoo的crumb是为当前浏览器会话生成的,和会话中的Cookie(核心是B和YFP这类Cookie)一一对应。你需要在同一个requests会话中,先访问Yahoo Finance主页拿到有效Cookie和crumb,再用它们请求筛选接口。

  • 完整的请求步骤:

    1. 初始化requests会话,请求Yahoo Finance主页(比如https://finance.yahoo.com/)。
    2. 从响应页面的源码里解析出crumb——搜索页面中的CrumbStore关键字,就能找到对应的crumb值。
    3. 带着会话自动保存的Cookie,加上正确的crumb参数和完整的浏览器请求头,调用筛选接口。
  • 请求头不能少:Yahoo会校验请求的User-Agent、Accept等字段,必须和浏览器发送的保持一致,否则会被判定为非合法请求。

  • 示例代码:

    import requests
    import re
    
    # 初始化会话,自动维护Cookie
    session = requests.Session()
    
    # 第一步:获取会话Cookie和crumb
    homepage_resp = session.get("https://finance.yahoo.com/")
    crumb_match = re.search(r'CrumbStore":{"crumb":"([^"]+)"', homepage_resp.text)
    if not crumb_match:
        raise Exception("Failed to extract crumb")
    crumb = crumb_match.group(1)
    
    # 第二步:构造筛选请求
    screener_params = {
        "crumb": crumb,
        # 替换成你自己的筛选参数,比如从浏览器开发者工具里复制的scrIds、count等
        "scrIds": "your_screener_id",
        "count": 50
    }
    
    # 复制浏览器的请求头核心字段
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
        "Accept": "application/json, text/plain, */*",
        "Accept-Language": "en-US,en;q=0.9"
    }
    
    screener_resp = session.get(
        "https://query2.finance.yahoo.com/v1/finance/screener",
        params=screener_params,
        headers=headers
    )
    
    # 输出结果
    print(screener_resp.json())
    
  • 注意事项:Yahoo的反爬规则会不定期更新,如果还是报错,检查是否有遗漏的Cookie字段,或者尝试增加更多浏览器请求头(比如Referer)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:05:19