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

从Yahoo Finance爬取昨日财报异常:获周日而非周五数据

问题排查步骤

1. 修复日期变量初始化错误

你的代码里today = today.date()属于语法错误——today变量未定义就调用方法,正确写法应为:

today = date.today()

这一步不修复的话代码无法正常运行,推测你实际运行的代码存在笔误,但这个错误会直接导致后续日期计算完全偏离预期。

2. 验证日期参数的格式与有效性

Yahoo Finance财报日历的日期参数要求为YYYY-MM-DD格式,虽然Pythondate对象转字符串默认符合该格式,但仍需确认两点:

  • 当今天是周日时,today - timedelta(days=2)是否确实得到上周五的日期
  • 手动拼接URL后在浏览器中打开,确认页面显示的是目标日期的财报数据,而非自动跳转到其他日期

比如今天是2024-05-19(周日),计算得到的目标日期应为2024-05-17(周五),打开对应URL后若页面自动跳转到周日内容,说明Yahoo Finance日历逻辑会自动调整到最近有财报发布的日期,此时需确认目标日期是否有财报发布记录。

3. 添加请求头模拟浏览器请求

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/124.0.0.0 Safari/537.36'
}
page = requests.get(url, headers=headers)

无请求头时,服务器可能返回默认页面内容(如当前日期),而非你指定日期的财报数据。

4. 检查元素定位的准确性

Fw(600) C($linkColor)类名对应的链接并非仅属于目标日期的财报条目,页面可能默认显示其他日期的内容。可以先打印soup.prettify()查看返回的HTML结构,确认页面是否包含目标日期的财报数据,再调整元素选择器:

table = soup.find('table', 'W(100%)')
if table:
    rows = table.find_all('tr')
    for row in rows[1:]:  # 跳过表头行
        ticker = row.find('a', 'Fw(600) C($linkColor)')
        if ticker:
            print(ticker.text)

通过遍历表格行,可查看页面中所有股票代码,确认是否为目标日期的内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:27:14