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

使用Tweepy拉取过去一年推文仅返回当日数据该如何解决

问题根因
  • 你当前调用的是Twitter v1.1标准搜索API,默认仅支持拉取最近7天的公开推文,要拉取超过7天的历史数据,需要申请学术研究权限或者企业级API权限;如果你已经有对应权限,只需调整调用参数适配时间范围拉取逻辑即可
  • 你仅设置了since_id参数(该参数限定返回ID大于该值的推文,也就是比该ID对应时间更新的内容),没有配套设置max_id限定返回的最大ID,接口默认会从最新的符合条件的推文开始返回,你单次仅拉取2000条,刚好是最新的单日数据量,自然看不到更早的内容
修复方案

1. 调整查询参数,增加时间切片逻辑

通过max_id分段拉取不同时间区间的内容,避免只拿到最新的数据,修改后的参考代码如下:

import tweepy

# 提前确认你要采集的一年时间区间对应的最小、最大推文ID,可通过公开的推文ID-时间映射工具对应
search_term = "#ethereum -filter:retweets"
min_tweet_id = '1345111141026914304' # 你原参数里的since_id,作为采集的最早ID边界
current_max_id = 你要采集的最新时间对应的推文ID # 作为采集的最新ID边界
sample_count = 0
target_sample = 你需要的总采样量
all_samples = []

while sample_count < target_sample:
    tweets = tweepy.Cursor(api.search_tweets, 
                          q=search_term,
                          lang='en', 
                          since_id=min_tweet_id,
                          max_id=current_max_id,
                          tweet_mode = 'extended').items(2000)
    batch_tweets = list(tweets)
    if not batch_tweets:
        break
    all_samples.extend(batch_tweets)
    sample_count += len(batch_tweets)
    # 更新max_id为当前批次最旧的推文ID减1,下次拉取更早时间的内容
    current_max_id = str(int(batch_tweets[-1].id) - 1)

2. 低权限适配方案

如果你没有学术或企业级API权限,无法直接拉取历史全年数据,可设置定时任务,每日固定拉取当日符合条件的推文,持续运行一年即可积累到全年的样本数据。

3. 随机采样优化

如果需要更均匀的随机样本,可把全年时间拆分为多个等距时间切片,每个切片随机选取ID段拉取对应区间的推文,避免样本集中在特定时间段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:36:03