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

如何在Tweepy中排除转发以获取200条原创Twitter数据?

如何用Tweepy排除转发,获取200条原创推文

嘿,作为编程新手遇到这种小问题太正常啦,我来一步步帮你搞定!

首先你提到的“-RT”其实不是直接加在代码里的参数,而是我们需要通过判断推文的属性来筛选掉转发内容。Tweepy返回的推文对象(Status类)自带了一个超方便的属性:is_retweet——如果这条推文是转发,它的值就是True,原创的话就是False。我们就靠这个来过滤!

基础版:筛选单次请求的推文

假设你原来的代码是这样获取推文的:

import tweepy

# 你的认证代码(OAuth部分)
auth = tweepy.OAuthHandler(你的consumer_key, 你的consumer_secret)
auth.set_access_token(你的access_token, 你的access_token_secret)

api = tweepy.API(auth)

# 获取目标账号的推文
tweets = api.user_timeline(screen_name="目标账号的用户名", count=200)

那只需要在获取后加一段筛选逻辑,把原创推文挑出来:

# 筛选原创推文,排除转发
original_tweets = []
for tweet in tweets:
    if not tweet.is_retweet:  # 判断不是转发
        original_tweets.append(tweet)
        
# 现在original_tweets里就是原创内容了
print(f"获取到{len(original_tweets)}条原创推文")

如果想更简洁,也可以用列表推导式:

original_tweets = [tweet for tweet in tweets if not tweet.is_retweet]

进阶版:确保凑够200条原创推文

上面的方法有个小问题:如果单次请求的200条推文里转发很多,原创数量不够200条怎么办?这时候需要分页获取更早的推文,直到凑够数量:

original_tweets = []
max_id = None  # 用来标记下一次请求的最早推文ID

while len(original_tweets) < 200:
    # 每次请求最多200条,tweet_mode='extended'是为了获取完整推文内容
    tweets = api.user_timeline(
        screen_name="目标账号的用户名",
        count=200,
        max_id=max_id,
        tweet_mode="extended"
    )
    
    if not tweets:
        break  # 没有更多推文可以获取了
    
    # 筛选原创并添加到列表
    for tweet in tweets:
        if not tweet.is_retweet:
            original_tweets.append(tweet)
            if len(original_tweets) == 200:
                break  # 够200条就停止
    
    # 更新max_id,避免重复获取同一条推文
    max_id = tweets[-1].id - 1

# 最终结果
print(f"成功获取到{len(original_tweets)}条原创推文")

小提示

  • 记得把代码里的你的consumer_key等替换成你自己的API密钥哦!
  • tweet_mode='extended'参数很重要,它能让你获取完整的推文文本,而不是被截断的版本。
  • 如果你的Tweepy版本比较旧,可能没有is_retweet属性,这时候可以用hasattr(tweet, 'retweeted_status')来判断——如果存在这个属性,说明是转发推文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:43:47