使用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
相关产品推荐
相关产品推荐

