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

调用Finnhub接口抓取AMZN历史新闻仅返回数天数据的问题咨询

问题解答

1. Finnhub接口单次拉取新闻的数量上限

  • 免费套餐下,company_news接口单次返回的新闻条目硬上限为100条,返回结果默认按发布时间倒序排列(最新内容在前)。如果指定时间范围内的新闻总量超过100条,接口会直接截断返回最新的100条,不会返回更早的内容,这就是你指定2022年1-5月范围、却只能拿到最近数天数据的核心原因。
  • 付费套餐会对应提升单次返回的条目上限,但依然存在阈值,大时间跨度拉取仍需要做分片处理。
  • 额外提醒:你贴出的代码里明文暴露了API Key,建议立刻到Finnhub控制台重置该Key,避免被他人盗用消耗额度。

2. 原有代码的问题判断

  • 代码本身的语法、参数传参格式没有错误,_from和to参数使用的YYYY-MM-DD格式完全符合接口要求。
  • 核心缺陷是没有做时间分片拉取、结果去重的逻辑,无法突破接口单次返回的数量限制,自然拿不到全时间范围的全量数据。

可直接使用的修正代码

逻辑为把需要拉取的大时间范围拆成按周的小窗口循环请求,每次拉取一周的新闻(单周单公司新闻量基本不会超过免费版100条的上限),拉取过程中自动去重,最后统一导出。

import finnhub
import pandas as pd
from datetime import datetime, timedelta

# 替换为你重置后的新API Key
finnhub_client = finnhub.Client(api_key="替换为你的新API_KEY")
symbol = 'AMZN'
start_date = datetime(2022, 1, 1)
end_date = datetime(2022, 5, 31)

all_news = []
current_start = start_date
# 按7天为一个时间窗口分片拉取
while current_start < end_date:
    current_end = min(current_start + timedelta(days=7), end_date)
    # 格式化日期为接口要求的字符串
    _from = current_start.strftime("%Y-%m-%d")
    _to = current_end.strftime("%Y-%m-%d")
    print(f"正在拉取 {_from} 到 {_to} 的新闻数据")
    # 调用接口
    chunk_news = finnhub_client.company_news(symbol, _from=_from, to=_to)
    all_news.extend(chunk_news)
    # 窗口向后滑动
    current_start = current_end + timedelta(days=1)

# 转成DataFrame,按新闻ID去重,避免分片边界出现重复数据
df = pd.DataFrame(all_news).drop_duplicates(subset='id')
# 时间戳转日期格式
df['datetime'] = df['datetime'].apply(lambda x: datetime.fromtimestamp(x))
# 按发布时间正序排序
df = df.sort_values(by='datetime', ascending=True).reset_index(drop=True)
# 导出到CSV
df.to_csv('/Users/rangapriyas/Desktop/News/AMZN.csv', index=False)
print(f"拉取完成,共获取有效新闻{len(df)}条")

如果拉取某段时间发现返回结果刚好为100条,说明该窗口内新闻量超限,可以把分片窗口从7天改成3天或者1天,重新拉取对应时间段即可,避免漏数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:12:13