如何用try-except处理Twitter API爬取已删除推文的报错问题
解决Twitter API爬取删除推文报错的问题
你当前的代码把try-except放在整个循环外面,只要遇到一个报错就会中断整个爬取流程。正确的做法是把异常处理放到循环内部,针对每个推文ID单独处理,这样就能实现跳过异常ID或用NaN填充对应数据的需求。
方案1:跳过已删除的推文
如果不需要保留已删除推文的ID,直接跳过这类报错的ID即可:
tweet_ids = twitter_archive['tweet_id'] tweet_id = [] likes = [] retweets = [] for ids in tweet_ids: try: tweet = api.get_status(ids) tweet_id.append(ids) likes.append(tweet.favorite_count) retweets.append(tweet.retweet_count) except Exception as e: # 可选:打印报错信息,方便排查问题 print(f"处理ID {ids} 时出错: {e}") # 跳过当前ID,继续处理下一个 continue tweet_info = pd.DataFrame({'tweet_id': tweet_id, 'likes': likes, 'retweets': retweets})
方案2:用NaN填充已删除推文的数据
如果需要保留所有推文ID,对已删除的推文用NaN填充点赞和转发数:
import numpy as np tweet_ids = twitter_archive['tweet_id'] tweet_id = [] likes = [] retweets = [] for ids in tweet_ids: try: tweet = api.get_status(ids) likes.append(tweet.favorite_count) retweets.append(tweet.retweet_count) except Exception as e: print(f"处理ID {ids} 时出错: {e}") likes.append(np.nan) retweets.append(np.nan) # 无论是否报错,都保留当前ID tweet_id.append(ids) tweet_info = pd.DataFrame({'tweet_id': tweet_id, 'likes': likes, 'retweets': retweets})
补充说明
- 将
try-except放在循环内,确保单个ID报错不会终止整个爬取任务 - 捕获
Exception可以覆盖大部分API报错场景(比如推文不存在、权限不足等),你也可以根据使用的Twitter库捕获更精准的异常(如tweepy.error.TweepError) - 方案2需要导入
numpy生成NaN,若不想依赖numpy,也可以用None,但NaN更适配pandas数据框的数值类型处理
内容的提问来源于stack exchange,提问作者Khola
相关产品推荐
相关产品推荐

