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

无法提取Yahoo Finance财报日期问题求助(附Python代码)

问题解决:Yahoo Finance财报日期提取失败

问题背景

现有基于Selenium、Pandas和Re的Python代码可提取Yahoo Finance页面的公司名称,但无法提取财报日期。目标页面示例:https://finance.yahoo.com/quote/A?p=A&.tsrc=fin-srch,需提取内容如Agilent Technologies, Inc. (A)和Earnings Date Aug 14, 2023 - Aug 18, 2023。

问题原因

  1. Selenium方法过时:原代码使用已弃用的find_element_by_xpath方法,新版本Selenium中无法正常工作
  2. 未处理动态加载:Yahoo Finance页面为动态渲染,直接查找元素可能因未加载完成导致失败
  3. XPath定位不准确:原XPath的文本匹配逻辑未适配页面实际结构

修复后的代码

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
import pandas as pd

# 读取包含链接的Excel文件
df = pd.read_excel('file.xlsx')

# 存储提取数据的空列表
company_names = []
earnings_dates = []

# 初始化Selenium驱动
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)  # 设置10秒显式等待超时

# 遍历DataFrame中的链接
for index, row in df.iterrows():
    url = row['Link']
    driver.get(url)

    # 提取公司名称(改用Selenium定位,比正则更稳定)
    try:
        company_name_element = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, 'h1.D\\(ib\\).Fz\\(18px\\)'))
        )
        company_name = company_name_element.text.strip()
    except:
        company_name = 'Company name not found'

    # 提取财报日期
    try:
        # 先定位到包含"Earnings Date"的行,再取对应的数值单元格
        earnings_row = wait.until(
            EC.presence_of_element_located((By.XPATH, '//tr[td[text()="Earnings Date"]]'))
        )
        earnings_date = earnings_row.find_element(By.XPATH, './td[2]').text.strip()
        # 拼接成目标格式
        earnings_date = f'Earnings Date {earnings_date}'
    except:
        earnings_date = 'Earnings date not found'

    # 添加到列表
    company_names.append(company_name)
    earnings_dates.append(earnings_date)

# 关闭驱动
driver.quit()

# 生成结果DataFrame
df_extracted = pd.DataFrame({
    'Link': df['Link'],
    'Company Name': company_names,
    'Earnings Date': earnings_dates
})

# 打印结果
print(df_extracted)

关键修复点

  • 替换过时方法:使用find_element(By.XPATH, ...)替代已弃用的find_element_by_xpath
  • 添加显式等待:通过WebDriverWait等待元素加载完成,避免动态渲染导致的元素未找到问题
  • 优化元素定位:先定位包含目标文本的整行,再提取对应数值单元格,提升定位准确性
  • 优化公司名提取:改用CSS选择器定位标题元素,比正则表达式更稳定可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:14:58