使用Tweepy Cursor下载推文时重复及循环输出问题求助
问题解决方法
1. 解决逐步输出的问题
你的代码把print语句放在了for循环内部,导致每次循环都会打印当前累积的DataFrame,所以才会出现第一次1条、第二次2条……直到第五次5条的情况。只需将print移到循环外部,等循环结束后再打印最终结果即可。
2. 解决重复推文的问题
Twitter搜索API本身可能返回重复结果,再加上你之前传入的搜索参数q=qw是列表(API要求为字符串),也可能引发异常。可以通过以下方式处理:
- 确保搜索关键词为字符串类型;
- 用集合记录已获取的推文ID,跳过重复项;
- 适当多请求一些推文,保证能收集到足够的不重复内容。
修改后的完整代码
import tweepy as tw import pandas as pd # 假设已完成API认证初始化 # auth = tw.OAuthHandler(consumer_key, consumer_secret) # auth.set_access_token(access_token, access_token_secret) # api = tw.API(auth) qw = 'Pele' # 改为字符串,而非列表 tweet_dataset = pd.DataFrame(columns=['Tweet_id', 'Author']) seen_tweet_ids = set() # 存储已获取的推文ID,用于去重 # 多请求几条推文,确保能拿到5条不重复的 for tweet in tw.Cursor(api.search_tweets, tweet_mode='extended', q=qw).items(10): if tweet.id not in seen_tweet_ids: seen_tweet_ids.add(tweet.id) # 用concat替代已弃用的append方法 new_row = pd.DataFrame([[tweet.id, tweet.author.screen_name]], columns=['Tweet_id', 'Author']) tweet_dataset = pd.concat([tweet_dataset, new_row], ignore_index=True) # 收集到5条不重复推文就停止循环 if len(tweet_dataset) == 5: break # 循环结束后打印最终的5条独立推文 print(tweet_dataset[['Author', 'Tweet_id']])
关键修改说明
- 移除循环内的
print,仅在循环结束后输出结果; - 将搜索关键词从列表改为字符串,符合API参数要求;
- 添加
seen_tweet_ids集合实现去重,避免重复推文存入DataFrame; - 使用
pd.concat替代DataFrame.append(append已被pandas弃用); - 设置循环获取10条推文作为缓冲,确保能筛选出5条不重复内容,达到数量后主动终止循环。
内容的提问来源于stack exchange,提问作者Gyle Odhiambo
相关产品推荐
相关产品推荐

