You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python的Tweepy按起止日期流式获取Twitter推文

如何用Tweepy结合Twitter完整档案权限获取指定日期范围的推文

嘿,作为Python初学者能搞定Twitter完整档案访问权限已经超棒啦!先给你理清一个关键误区:Tweepy的流式API(比如StreamingClient)是用来抓取实时推文流的,根本不支持指定历史起止日期。你需要用的是Twitter的Full-Archive Search API,通过Tweepy的Client类来调用它,这才是获取历史数据的正确姿势。

下面是一步步的实操指南,专门针对初学者:

第一步:确保你用的是最新版Tweepy

Twitter API V2是目前的主流,Tweepy的旧版本对V2支持不好,所以先升级到最新版:

pip install --upgrade tweepy

第二步:初始化Tweepy Client

你需要用你的Bearer Token来认证(在Twitter开发者平台的项目里就能找到),不用复杂的OAuth流程,Bearer Token足够调用Full-Archive Search:

import tweepy

# 替换成你自己的Bearer Token
BEARER_TOKEN = "你的Bearer Token"
client = tweepy.Client(bearer_token=BEARER_TOKEN)

第三步:构造带日期范围的搜索请求

核心方法是client.search_all_tweets——这个方法只有拥有完整档案权限的账号才能调用,刚好符合你的情况。你需要指定:

  • 搜索关键词(可以用Twitter的搜索语法,比如排除转推、指定话题等)
  • 起始时间start_time和结束时间end_time,格式必须是ISO 8601 UTC时间(比如2023-01-01T00:00:00Z
  • 要获取的推文字段(比如创建时间、文本、互动数据等)

完整代码示例(带分页处理)

因为API每次最多返回100条推文,所以用Tweepy.Paginator来自动分页获取所有符合条件的数据:

import tweepy

BEARER_TOKEN = "你的Bearer Token"
client = tweepy.Client(bearer_token=BEARER_TOKEN)

# 自定义搜索参数
query = "你的研究主题关键词 -is:retweet"  # -is:retweet 用来排除转推,只保留原创推文
start_time = "2023-01-01T00:00:00Z"  # 起始日期(UTC时间)
end_time = "2023-01-31T23:59:59Z"    # 结束日期(UTC时间)
max_results_per_page = 100  # 每页最多100条,这是API的上限

# 初始化列表存储所有推文
all_tweets = []

# 分页获取数据
for response in tweepy.Paginator(
    client.search_all_tweets,
    query=query,
    start_time=start_time,
    end_time=end_time,
    # 指定要获取的推文字段,按需添加
    tweet_fields=["created_at", "text", "public_metrics", "author_id"],
    max_results=max_results_per_page
):
    # 将当前页的推文添加到总列表
    if response.data:
        all_tweets.extend(response.data)
    # 打印进度,方便你跟踪
    print(f"已累计获取 {len(all_tweets)} 条推文")

# 示例:打印前5条推文的内容和创建时间
print("\n=== 前5条示例推文 ===")
for tweet in all_tweets[:5]:
    print(f"创建时间: {tweet.created_at}")
    print(f"推文内容: {tweet.text}\n")

几个重要注意事项

  • 日期格式不能错:必须是YYYY-MM-DDTHH:MM:SSZ,Z代表UTC时间,如果你用的是本地时间,要先转换成UTC。
  • 搜索语法灵活用:比如要搜带话题的推文可以写#你的话题,要指定作者用from:用户名,排除关键词用-关键词,直接在Twitter网页端搜索时就能测试语法效果。
  • 速率限制:Full-Archive Search每15分钟最多允许900次请求,每次最多100条,Tweepy的Paginator会自动处理速率限制的429错误,自动重试,所以不用手动加延迟。
  • 权限验证:如果调用search_all_tweets时提示权限不足,说明你的账号还没开通完整档案权限,去Twitter开发者平台确认一下权限是否生效。

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

火山引擎 最新活动