使用Tweepy爬取话题推文时转发文重复原推文点赞/转发数问题
解决方案
问题根源
你当前的代码在处理转发推文时,错误地将原推文的点赞数(tweet.retweeted_status.favorite_count)填充到了转发推文的Likes列,同时Retweets列实际是原推文的总转发数,导致所有同一条原推文的转发都显示相同的点赞/转发数据,造成冗余。
修正方案
1. 正确区分转发推文与原推文的统计数据
修改代码中数据填充的逻辑,确保转发推文记录的是自身的点赞数和转发数,而非原推文的:
from os import access import tweepy import configparser import pandas as pd api_key = '' api_key_secret = '' access_token = '' access_token_secret = '' auth = tweepy.OAuthHandler(api_key, api_key_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth) keywords = '#AsiaCup2022' limit = 10000 tweets = tweepy.Cursor(api.search_tweets, q = keywords, count = 100, tweet_mode = 'extended').items(limit) columns = ['User', 'Tweet', 'Likes', 'Retweets', 'Is_Retweet', 'Original_Tweet_ID'] data = [] for tweet in tweets: is_retweet = hasattr(tweet, 'retweeted_status') original_tweet_id = tweet.retweeted_status.id_str if is_retweet else tweet.id_str # 转发推文的点赞是自身的favorite_count,转发数是自身的retweet_count likes = tweet.favorite_count retweets = tweet.retweet_count # 若需要保留原推文的统计数据,可额外添加列 # original_likes = tweet.retweeted_status.favorite_count if is_retweet else None # original_retweets = tweet.retweeted_status.retweet_count if is_retweet else None data.append([ tweet.user.screen_name, tweet.full_text, likes, retweets, is_retweet, original_tweet_id ]) df = pd.DataFrame(data, columns=columns) df.to_excel("Cup2022.xlsx")
2. 可选:过滤转发推文,仅保留原创内容
如果你的分析不需要转发推文,可以直接在爬取时过滤,减少冗余数据:
在search_tweets的q参数中加入-filter:retweets:
tweets = tweepy.Cursor(api.search_tweets, q = f"{keywords} -filter:retweets", count = 100, tweet_mode = 'extended').items(limit)
这样爬取的内容只会包含带指定话题的原创推文,彻底避免转发带来的冗余问题。
说明
- 修改后的代码新增了
Is_Retweet和Original_Tweet_ID列,方便你后续区分转发内容及关联原推文; - 若需要同时分析原推文和转发的互动数据,可以取消代码中注释的部分,添加原推文的统计列,这样既不会混淆数据,也能保留完整分析维度。
内容的提问来源于stack exchange,提问作者Fakhr Ali
相关产品推荐
相关产品推荐

