如何在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
相关产品推荐
相关产品推荐

